将列添加到Symfony中的现有实体

The*_*777 33 php symfony doctrine-orm

我一直在我的网络服务器上玩Symfony,我一直在为我的数据库创建带有学说的实体.我想为这些实体中的一个添加一个列......我想做类似的事情:

php app/console doctrine:modify:entity
Run Code Online (Sandbox Code Playgroud)

现在我知道这个命令不存在,但有一种方法(不进行整个迁移)只需添加一个列.

PS我知道我可以打开php文件并在那里以文本方式添加列然后更新架构,但我将它分发给一些客户端,我喜欢更像"命令行"的方法.

P. *_*iro 73

实际上,使用Doctrine完全没有意义去做你建议的事情.

Doctrine是一种ORM(对象关系映射)工具.这意味着您要从PHP代码中抽象数据库,将数据库内容委托给Doctrine.学说在这方面做得很好.

由于您希望使用最新版本的模型更新您的客户/同行,因此您应该使用Doctrine Migrations(http://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html).这是管理数据库更新的方法.此外,它使您可以完全控制升级/降级数据库时的操作.例如,您可以在添加FK之前设置默认值.

在类上添加新属性的步骤应该是:

  • 通过以下方式修改类:

    • Acme\MyBundle\Entity\Customer并添加您想要的属性;

      Acme\MyBundle\Entity\Customer

    • 或修改学说文件:

      Acme/MyBundle/Resources/config/doctrine/customer.yml

  • 运行console命令(它将在类中添加正确的set/get)

    php app/console doctrine:generate:entities AcmeMyBundle:Customer

  • 运行console命令

    php app/console doctrine:migrations:diff

  • 运行console命令(它将在app/DoctrineMigrations上放置一个新文件)

    php app/console doctrine:migrations:migrate

当您部署新版本的代码时,您所要做的就是更新源代码并运行上面的命令.

对于Symfony 3:

  • 通过以下方式修改类:

    • Acme\MyBundle\Entity\Customer并添加您想要的属性;

      Acme\MyBundle\Entity\Customer

    • 或修改学说文件:

      Acme/MyBundle/Resources/config/doctrine/customer.yml

  • 运行console命令(它将在类中添加正确的set/get)

    php bin/console doctrine:generate:entities AcmeMyBundle:Customer

  • 运行console命令(更新数据库)

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


Sum*_*tel 10

在 Symfony 上的现有实体中添加新列。我有同样的问题。在我长期研究最佳解决方案之后。

Symfony 4 上的解决方案工作

例子:

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

php bin/console make:entity Blog
Run Code Online (Sandbox Code Playgroud)

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


Tom*_*Tom 9

您肯定要打开定义实体的PHP/XML/YML文件并在其中添加列.然后,您使用命令行并说

console doctrine:schema:update
Run Code Online (Sandbox Code Playgroud)

这样,您的实体定义与数据库同步,您的数据库也会更新.