当我运行模式更新时,它成功更新了我的实体的模式,但是如果数据库中有任何“非教条”表,则删除它们。不幸的是,我正在使用的第三方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);
答案 0 :(得分:1)
这将获取所有更新sql但解析掉任何drop语句:
$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 );
}
答案 1 :(得分:0)
您可以使用--dump-sql
而不是--force
运行架构工具,复制并粘贴--dump-sql
的输出并手动在数据库上运行(当然删除DROP
您要保留的表的语句。)