2012-02-09 4 views
2

スキーマ更新を実行すると、エンティティのスキーマが正常に更新されますが、データベースに 'doctrine'以外のテーブルがあれば削除されます。残念ながら、これらの他のテーブルは、私が使用しているサードパーティのCMSに必要です。他のものを削除せずに1つのエンティティのスキーマを更新する

他のものを削除せずに特定のエンティティ(またはそのすべて)のスキーマを更新するようにdoctrineに指示する方法はありますか?

以下は私の既存のアップデートコードです。 $classes配列には、いくつかの異なるプラグインで見つかったエンティティクラスのすべてのメタデータが含まれています。

//$em is an instance of EntityManager 

//Psuedo Code 
$classes = array(
    $em->getClassMetadata('class1'), 
    $em->getClassMetadata('class2'), 
    $em->getClassMetadata('class3'), 
    $em->getClassMetadata('class4'), 
    $em->getClassMetadata('class5'), 
); 

//Real Code 
$st = new Doctrine\ORM\Tools\SchemaTool($em); 
if ($classes) 
    $st->updateSchema($classes); 

答えて

1

これは、更新SQLのすべてを取得しますが、任意のドロップ文を解析します

$sql = $st->getUpdateSchemaSql($classes); 

$count = count($sql); 
for($i=0; $i<$count; $i++) 
{ 
    if(substr($sql[$i], 0, 4) == 'DROP') 
     unset($sql[$i]); 
} 

foreach($sql as $statement) 
{ 
    $em->getConnection()->exec($statement); 
} 
0

あなたは(もちろん、あなたが保存したいのテーブルのDROP文を削除する。)、--dump-sqlの代わり--forceでスキーマツールを実行--dump-sqlからの出力をコピー&ペーストして、手動でデータベース上でそれを実行することができ

関連する問題