我一直在我的网络服务器上使用 Symfony,并且一直在为我的数据库创建具有原则的实体。我想向其中一个实体添加一列...我想做类似的事情:
php app/console doctrine:modify:entity
现在我知道此命令不存在,但有没有办法(无需进行整个迁移)来简单地添加一列。
附:我知道我可以打开 php 文件并在其中以文本方式添加列,然后更新架构,但我将其分发给一些客户端,我更喜欢“类似命令行”的方法。
最佳答案
实际上,使用 Doctrine 做你建议的事情根本没有意义。
Doctrine 是一个 ORM(对象关系映射)工具。这意味着你想从你的 PHP 代码中抽象出数据库,你将数据库的东西委托(delegate)给 Doctrine。教义在这方面做得很好。
由于您想让您的客户/同行了解最新版本的模型,您应该使用 Doctrine Migrations (http://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html)。这就是管理数据库更新的方式。此外,它使您可以完全控制升级/降级数据库时的操作。例如,您可以在添加 FK 之前设置默认值。
在类上添加新属性的步骤应该是:
对于 Symfony 2:
修改类:
Acme\MyBundle\Entity\Customer 并添加你想要的属性;
Acme\MyBundle\Entity\Customer
或修改学说文件:
Acme/MyBundle/Resources/config/doctrine/customer.yml
运行控制台命令(它将在类中添加正确的 set/get)
php 应用程序/控制台原则:generate:entities AcmeMyBundle:Customer
运行控制台命令
php 应用程序/控制台原则:迁移:差异
运行控制台命令(它将在 app/DoctrineMigrations 上放置一个新文件)
php 应用程序/控制台原则:迁移:迁移
当您部署新版本的代码时,您所要做的就是更新源代码并运行上面的命令。
对于 Symfony 3:
修改类:
Acme\MyBundle\Entity\Customer 并添加你想要的属性;
Acme\MyBundle\Entity\Customer
或修改学说文件:
Acme/MyBundle/Resources/config/doctrine/customer.yml
运行控制台命令(它将在类中添加正确的 set/get)
php bin/console 原则:generate:entities AcmeMyBundle:Customer
运行控制台命令(更新数据库)
php bin/console 学说:schema:update --force
关于php - 向 Symfony 中的现有实体添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14941358/