Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine orm 更新一个实体的架构而不删除其他所有内容_Doctrine Orm - Fatal编程技术网

Doctrine orm 更新一个实体的架构而不删除其他所有内容

Doctrine orm 更新一个实体的架构而不删除其他所有内容,doctrine-orm,Doctrine Orm,当我运行模式更新时,它会成功地更新实体的模式,但如果数据库中有任何“非条令”表,它会删除它们。不幸的是,我使用的第三方CMS需要这些其他表格 有没有一种方法可以告诉条令在不删除任何其他内容的情况下更新某些实体(或所有实体)的模式 下面是我现有的更新代码。$classes数组包含多个不同插件中实体类的所有元数据 //$em is an instance of EntityManager //Psuedo Code $classes = array( $em->getClassMe

当我运行模式更新时,它会成功地更新实体的模式,但如果数据库中有任何“非条令”表,它会删除它们。不幸的是,我使用的第三方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);

您可以使用
--dump sql
而不是
--force
运行模式工具,从
--dump sql
复制并粘贴输出,然后手动在数据库上运行它(当然,删除要保留的表的
DROP
语句)

这会获取所有更新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 );
}
$sql=$st->getUpdateSchemaSql($classes);
$count=count($sql);
对于($i=0;$igetConnection()->exec($statement);
}