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 中的现有文档添加新字段