Symfony / Doctrine中的可选ManyToOne关联

时间:2014-08-28 12:30:30

标签: php symfony doctrine-orm

我目前正在使用包含现有数据库的项目的新版本,因此我需要创建试图缩小数据库更改的实体。我的主要问题是我想在两个实体之间创建一个可选的关联,但我们运行 doctrine:scheme:update 命令,它会抛出下一个错误:

  [Doctrine\DBAL\DBALException]
An exception occurred while executing 'ALTER TABLE table_A ADD CONSTRAINT 
FK_AAB363B1DD3B1998 FOREIGN KEY (b_id) REFERENCES table_B 
(id)': SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update 
a child row: a foreign key constraint fails (`database`.`#sql-7d0_1881`, CONSTRAINT 
`FK_AAB363B1DD3B1998` FOREIGN KEY (`b_id`) REFERENCES 
`table_B` (`id`))


[PDOException]
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child 
row: a foreign key constraint fails (`database`.`#sql-7d0_1881`, CONSTRAINT 
`FK_AAB363B1DD3B1998` FOREIGN KEY (`b_id`) REFERENCES 
`table_B` (`id`))

正如您在错误中看到的,A类具有包含实体B上的对象的属性。此关联必须是单向的。

当我声明这种类型的关联时,我正在使用此代码:

/**
 * @var B
 *
 * @ORM\ManyToOne(targetEntity="B")
 * @ORM\JoinColumn(name="b_id", referencedColumnName="id")
 */

我想将此关联设为可选,因为根本不需要此字段。

我尝试过使用 nullable 属性,但是阅读Doctrine文档,它的默认值似乎是真的,所以它应该对我有用,但不管出于什么原因它都没有。

如果您有任何建议,代码段或任何有关此问题的信息,我将不胜感激。

提前问候并感谢你。

修改

我已经检查过这个列有NULL属性:

http://i.imgur.com/gGSOqTm.png

1 个答案:

答案 0 :(得分:1)

而不是运行doctrine:scheme:update运行doctrine:scheme:update --dump-sql

然后手动运行输出SQL代码并忽略不相关的 ALTER TABLE table_A ADD CONSTRAINT 命令