php - 向 Symfony 中的现有实体添加列

标签 php symfony doctrine-orm

我一直在我的网络服务器上使用 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/

相关文章:

php - 将 html 表单 cloumn 数组转换为行 php

mongodb - Symfony 返回 "MongoId Class not found"错误

Symfony ManyToOne 关系 getter 返回空对象

php - 如何在插入时向 YouTube 视频添加缩略图

php - 如何使用 symfony2 学说查询生成器选择不同的查询?

php - php cron 作业可以访问 session 变量/cookie 吗?

PHP:如何使用类函数?

javascript - 未捕获的类型错误 : Cannot read property 'length' of undefined on json_encode()

php - 在 Symfony2 Doctrine findBy() 中保留数组的初始顺序

php - 扩展 Doctrine Entity 以添加业务逻辑