Symfony/Doctrine中的可选ManyToOne关联


Optional ManyToOne association in Symfony/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")
 */

我想让这个关联是可选的,因为这个字段根本不是必需的。

我尝试过使用可为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命令