Symfony2 doctrine来自特定实体的更新架构

时间:2015-08-28 17:45:47

标签: php symfony doctrine-orm doctrine

如果我跑

php app/console doctrine:schema:update --force

它将从所有实体更新我的数据库。

我只需要为User实体更新数据库,解决方案是什么?

一种解决方案是定义自定义实体管理器,然后将该实体管理器传递给

php app/console doctrine:schema:update --force --em="custom"

但是如果没有定义自定义实体管理器,它可能存在更快的东西吗?

2 个答案:

答案 0 :(得分:11)

根据命令文档,没有这样的选项。如果这只是你必须做的一次,我建议使用--dump-sql选项获取所需的SQL指令,并手动运行你需要的指令。

P.S。我无法理解仅更新实体架构的原因是什么,并使所有其他实体不与数据库同步。这听起来像是一个获取db错误的方法。

答案 1 :(得分:0)

您可以手动使用Doctrine SchemaTool类生成仅基于单个实体的SQL差异。您需要访问Doctrine的EntityManager - 以下示例假设您访问Symfony的容器。

use Doctrine\ORM\Tools\SchemaTool;

$em = $this->container->get('doctrine')->getManager();
$schemaTool = new SchemaTool($em);
$metadata = $em->getClassMetadata(YourEntity::class);
$sqlDiff = $schemaTool->getUpdateSchemaSql([$metadata], true);

变量$sqlDiff现在将包含一系列SQL语句,这些语句是使数据库模式与实体映射保持同步所必需的。

传递给SchemaTool::getUpdateSchemaSql()的第二个参数很重要 - 没有它,默认行为是为数据库中出现的每个其他表生成DROP TABLE语句。