向 Symfony 中的现有实体添加列

2022-08-30 11:27:37

我一直在我的Web服务器上玩Symfony,我一直在为我的数据库创建带有教义的实体。我想向其中一个实体添加一列...我想做这样的事情:

php app/console doctrine:modify:entity

现在我知道这个命令不存在,但是有没有办法(不执行整个迁移)简单地添加一列。

附言:我知道我可以打开php文件并在那里以文本方式添加列,然后更新架构,但是我正在将其分发给一些客户端,并且我喜欢更“类似命令行”的方法。


答案 1

事實上,使用教義根本沒有意義去做你建議的事情。

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


答案 2

在 Symfony 上的现有实体中添加新列。我有同样的问题在那里。经过我长期研究,最好的解决方案就在那里。

Symfony 4 上的解决方案工作

例:

已经在一个名称列中创建的博客实体在那里,我想添加描述列。如此简单的输入

php bin/console make:entity Blog

运行此命令后,您要添加新列


推荐