デプロイ先のサイト数が少しずつ増えて行くようなシステムの場合、symfonyのdoctrine:migrate処理のプレ・ポスト処理では、dqlは使用しない方が良いです。

例えば、SiteConfHonbuというモデルに、image_enabledという項目を追加し、その値をtrueに設定する場合、通常は次のようにpostUpはdqlを使用して記述します。(デフォルト値を1にすればpostUpは不要ですが、あくまで例です。)

public function up()
{
  $this->addColumn('site_conf_honbu','image_enabled', 'boolean', array('notnull' => true, 'default' => 0) );
}
public function postUp()
{
  Doctrine::getTable('SiteConfHonbu')->createQuery('c')
  ->update()
  ->set('c.image_enabled', true)
  execute();
}

もちろん、これは、この時点では、何の問題もなく動作します。

ところが、この後、バージョンアップによってimage_enabledの名前がtop_image_enabledに変更になった場合はどうなるでしょうか。

新しいサイトにデプロイする場合を考えてみてください。

この時、モデルにはimage_enabledという項目は既に無くなっています。その状態で、上記のdoctrine:migrate処理を行うと、エラーが発生してしまいますね。

postUpは、以下のようにsqlで記述してやれば、OKです。

public function postUp()
{
  //将来的にSiteConfHonbuモデルは変更になる可能性がある為、dqlは使用しない。
  $conn=Doctrine_Manager::connection();
  $sql='UPDATE site_conf_honbu set image_enabled=1';
  $conn->exec($sql,array());
}

 

*配置先が1サイトなら、特にこのような考慮は不要です。