Symfony2 doctrine来自特定实体的更新架构
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony2 doctrine来自特定实体的更新架构相关的知识,希望对你有一定的参考价值。
如果我跑
php app/console doctrine:schema:update --force
它将从所有实体更新我的数据库。
我只需要为User实体更新数据库,解决方案是什么?
一种解决方案是定义自定义实体管理器,然后将该实体管理器传递给
php app/console doctrine:schema:update --force --em="custom"
但是,如果没有定义自定义实体管理器,它可能更快存在吗
根据命令文档,没有这样的选项。如果这只是你必须做的一次,我建议使用--dump-sql
选项来获取所需的SQL指令,并手动运行你需要的指令。
附:我无法理解仅更新实体模式的原因是什么,并使所有其他实体不与数据库同步。这听起来像是一个获取db错误的方法。
您可以手动使用Doctrine SchemaTool类来仅基于单个实体生成SQL差异。您需要访问Doctrine的EntityManager - 以下示例假设您访问Symfony的容器。
use DoctrineORMToolsSchemaTool;
$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
语句。
以上是关于Symfony2 doctrine来自特定实体的更新架构的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2/Doctrine:如何从实体类中持久化一个实体?
Symfony2 - Doctrine - 在实体管理器刷新调用中捕获错误
在 Doctrine (symfony2) 中对可翻译实体进行版本控制
Symfony2/Doctrine:如何使用 OneToMany 将实体重新保存为级联新行