propel:build-schemaで、プラグイン内のテーブルまで含めてしまうのを回避

これって他に回避方法あるのかな?

phpmyadminでテーブル編集 => PDF編集ページでER図作成 => スキーマビルド => モデルビルド の手順でやってるけど、これだとプラグイン内のテーブルまで混ぜてしまい、ビルドエラーに…

ということで回避するために、build-model後にプラグイン内のテーブルを除外するコード。YAMLにしか対応していないので注意を。

<?php
/**
 * build-schemaで生成されたものから、プラグインで生成されたテーブルを除外
 *
 *
 *
 */
class sfPropelIgnoreSchemaPluginTask extends sfPropelBuildSchemaTask
{
  /**
   * @see sfTask
   */
  protected function configure()
  {
    parent::configure();
 
    $this->aliases = array('propel-ignore-plugin-schema');
    $this->namespace = 'propel';
    $this->name = 'ignore-plugin-schema';
    $this->briefDescription = 'Creates a schema from an existing database';
 
    $this->detailedDescription = "propel:ignore-plugin-schema";
 
  }
 
  /**
   * @see sfTask
   */
  protected function execute($arguments = array(), $options = array())
  {
  	parent::execute($arguments, $options);
  	$this->ignore();
  }
 
  /**
   * get tables from plugin
   *
   * @return array
   */
  protected function getPluginTables()
  {
    if (!$dirs = $this->configuration->getPluginSubPaths('/config'))
    {
      return;
    }
  	$schemas = sfFinder::type('file')->name('*schema.yml')->prune('doctrine')->in($dirs);
  	$tables = array();
  	foreach($schemas as $schema)
  	{
  		$this->log($schema);
  		$y = new sfPropelDatabaseSchema();
  		$y->loadYAML($schema);
  		$s = $y->getTables();
  		foreach($s as $tableName => $table)
  		{
  			$tables[] = $tableName;
  			$this->log(" - ".$tableName);
  		}
 
  	}
  	return $tables;
 
  }
 
  protected function ignore()
  {
  	$ignoreTables = $this->getPluginTables();
 
    $ymlSchemaPath = sfConfig::get('sf_config_dir').'/schema.yml';
 
    $schema = sfYaml::load($ymlSchemaPath);
    foreach($ignoreTables as $t)
    {
    	unset($schema['propel'][$t]);
    }
 
    $y = new sfPropelDatabaseSchema();
    $y->loadArray($schema);
    file_put_contents($ymlSchemaPath, $y->asYAML());
  }
 
}