2012-02-09 60 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陈述。)