Symfony2 - 向现有实体添加新字段

Posted

技术标签:

【中文标题】Symfony2 - 向现有实体添加新字段【英文标题】:Symfony2 - Adding a new field to an existing entity 【发布时间】:2015-08-20 12:40:38 【问题描述】:

首先,我对 Symfony2 完全陌生。

我创建了一个实体 -> 基于该实体创建了一个表 -> 使用该实体创建了一个表单。

我现在意识到我需要在表单中添加一个字段。所以我做了以下事情:

添加了新属性 -> 添加了 ORM 注释 -> 生成了 setter 和 getter -> 运行“php app/console dictionary:schema:update”

这导致了以下异常:“名称为 'XXX' 的表已存在”

所以没有更新。知道我做错了什么吗?下面是我添加到实体的属性:

/**
 * @var text
 *
 * @ORM\Column(name="description", type="text")
 *
 * @Assert\NotBlank(message="Please insert a description")
 * @Assert\Length(max=100)
 *
 */
private $description;

【问题讨论】:

我也试过这个:***.com/questions/14941358/… 但这也没有用 你的类注解中@ORM\Table() 里面有什么? 你确定你跑过php app/console doctrine:schema:update吗?首先,您需要标志 php app/console doctrine:schema:update --force 才能实际运行该命令。其次,您遇到的异常听起来更像是在现有模式上运行 php app/console doctrine:schema:create 时遇到的情况;例如SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'my_table' already exists. 是的,对不起,我应该说我使用了 --force 标志。是的,我确实运行了该命令。 为什么要投反对票?对我来说,这似乎是一个完全合理的问题。希望投票者会长出一对并说明他们为什么这样做。 【参考方案1】:

尝试使用Doctrine Migrations Bundle。您尝试执行的操作——对已部署的数据库进行更改——称为“数据库迁移”。我发现这个捆绑包非常有帮助。

您将运行“app/console dictionary:migrations:diff”而不是运行“app/console dictionary:schema:update”,这会将您的数据库架构与更新后的实体进行比较,并生成 sql 代码以将其恢复同步中。

【讨论】:

【参考方案2】:

我知道这是一个老问题。但我写作是因为它对其他人有用。

可能您没有在项目中使用注释。可能您的项目已配置为使用 xml 或 yml。

您必须在 $proyect_home/app/config/config.yml 检查您的配置并写入 orm 区域:

orm:
  ....
  mappings:
    AppBundle:
      type: annotation

【讨论】:

以上是关于Symfony2 - 向现有实体添加新字段的主要内容,如果未能解决你的问题,请参考以下文章

向实体添加新字段

使用 mongoose 通过 update 方法向 mongodb 中的现有文档添加新字段

使用 mongoose 通过 update 方法向 mongodb 中的现有文档添加新字段

向 MongoDB 集合中的每个文档添加新字段

向MongoDB中的现有集合添加具有大量行的新字段

Vapor Fluent 如何向现有表添加新的必填字段键