2012-02-09 58 views
2

當我運行模式更新時,它成功更新了我的實體的模式,但是如果數據庫中存在任何「非學說」表,它將刪除它們。不幸的是,這些其他表格是我使用的第三方CMS所必需的。更新一個實體的模式而不刪除其他所有內容

有沒有辦法告訴學說更新某些實體(或全部)的模式而不刪除其他東西?

以下是我現有的更新代碼。 $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

您可以運行與--dump-sql,而不是--force架構工具,複製和輸出--dump-sql粘貼和數據庫上手動運行它(當然除去您要保留這些表的DROP陳述。)