Symfony2原则从特定实体更新模式


Symfony2 doctrine update schema from specific entity

如果我运行

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

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

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

一个解决方案是定义一个自定义实体管理器,然后将该实体管理器传递给
php app/console doctrine:schema:update --force --em="custom"

但也许它存在更快的东西没有定义自定义实体管理器?

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

注:我不明白为什么只更新一个实体的模式,而让所有其他实体不与数据库同步。这听起来像是获取db错误的方法。

您可以手动使用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语句。