向 Symfony 中的现有实体添加列
我一直在我的Web服务器上玩Symfony,我一直在为我的数据库创建带有教义的实体。我想向其中一个实体添加一列...我想做这样的事情:
php app/console doctrine:modify:entity
现在我知道这个命令不存在,但是有没有办法(不执行整个迁移)简单地添加一列。
附言:我知道我可以打开php文件并在那里以文本方式添加列,然后更新架构,但是我正在将其分发给一些客户端,并且我喜欢更“类似命令行”的方法。
我一直在我的Web服务器上玩Symfony,我一直在为我的数据库创建带有教义的实体。我想向其中一个实体添加一列...我想做这样的事情:
php app/console doctrine:modify:entity
现在我知道这个命令不存在,但是有没有办法(不执行整个迁移)简单地添加一列。
附言:我知道我可以打开php文件并在那里以文本方式添加列,然后更新架构,但是我正在将其分发给一些客户端,并且我喜欢更“类似命令行”的方法。
事實上,使用教義根本沒有意義去做你建議的事情。
Doctrine是一个ORM(Object-Relational Mapping)工具。这意味着你想从你的PHP代码中抽象出数据库,你把数据库的东西委托给 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 app/console doctrine:generate:entities AcmeMyBundle:Customer
运行控制台命令
php app/console doctrine:migrations:diff
运行控制台命令(它将在应用程序/DoctrineMigrations上放置一个新文件)
php app/console doctrine:migrations:migrate
部署新版本的代码时,您所要做的就是更新源代码并运行上面的命令。
对于Symfony 3:
通过以下方式修改类:
Acme\MyBundle\Entity\Customer并添加您想要的属性;
Acme\MyBundle\Entity\Customer
或修改原则文件:
Acme/MyBundle/Resources/config/doctrine/customer.yml
运行控制台命令(它将在类中添加正确的 set/get)
php bin/console doctrine:generate:entities AcmeMyBundle:Customer
运行控制台命令(更新数据库)
php bin/console doctrine:schema:update --force
在 Symfony 上的现有实体中添加新列。我有同样的问题在那里。经过我长期研究,最好的解决方案就在那里。
Symfony 4 上的解决方案工作
例:
已经在一个名称列中创建的博客实体在那里,我想添加描述列。如此简单的输入
php bin/console make:entity Blog
运行此命令后,您要添加新列