我目前正在一个包含现有数据库的项目的新版本中工作,因此我需要创建实体来缩小数据库更改。我的主要问题是我想在两个实体之间创建一个可选的关联,但我们运行条令:scheme:update命令,它会给我带来下一个错误:
[DoctrineDBALDBALException]
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
*
* @ORMManyToOne(targetEntity="B")
* @ORMJoinColumn(name="b_id", referencedColumnName="id")
*/
我想让这个关联是可选的,因为这个字段根本不是必需的。
我尝试过使用可为null的属性,但在阅读Doctrine文档时,它的默认值似乎是true,所以它应该对我有效,但出于任何原因,它都无效。
如果您能就这个问题告诉我任何建议、代码片段或任何东西,我将不胜感激。
提前向您致以问候和感谢。
编辑:
我已经检查过该列具有NULL属性:
https://i.stack.imgur.com/YiNNP.png
不运行doctrine:scheme:update
,而是运行doctrine:scheme:update --dump-sql
然后手动运行输出SQL代码,并忽略不相关的ALTER TABLE TABLE_A ADD CONSTRAINT命令