Symfony无法执行Doctrine Schema更新



由于伪造密钥约束问题,我在运行 doctrine:schema:update --force 时遇到问题。

 [DoctrineDBALDBALException] An exception occurred while executing 'ALTER TABLE Product ADD CONSTRAINT FK_1CF73D312ADD6D8C FOREIGN KEY (supplier_id) REFERENCES Supplier (id) ON DELETE SET NULL':                                                                                                                   
 SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`wic_dev`.`#sql-5c0 a_1a12`, CONSTRAINT `FK_1CF73D312ADD6D8C` FOREIGN KEY (`supplier_id`) REFERENCES `Supplier` (`id`) ON DELETE SET NULL)                        
 [PDOException] SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`wic_dev`.`#sql-5c0 a_1a12`, CONSTRAINT `FK_1CF73D312ADD6D8C` FOREIGN KEY (`supplier_id`) REFERENCES `Supplier` (`id`) ON DELETE SET NULL)

我有两个表正在创建此错误:产品和供应商。

产品可以

有1个供应商,供应商可以有很多产品。

以下是我设置实体的方法:

产品实体:

 /**
 * @ORMManyToOne(targetEntity="WICSupplierBundleEntitySupplier", inversedBy="products", fetch="EAGER")
 * @ORMJoinColumn(name="supplier_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
 * @CommonVersioned
 * @AssertNotBlank(message="Supplier Cannot Be Blank")
 */
protected $supplier;

供应商实体

 /**
 * @ORMOneToMany(targetEntity="WICProductBundleEntityProduct", mappedBy="supplier", cascade={"all"})
 */
protected $products;

我目前每个表中都有数据。我知道有些产品缺少供应商,供应商缺少产品。

我做错了什么,如何解决这个问题?我需要运行此架构更新,以便我的其他表也会更新。

非常感谢您的帮助!

这是我解决问题的方法。在我的产品表中,如果未找到供应商,我将值存储为"0"。由于两个表之间存在多对多关系,因此存在冲突,因为supplier_id永远不会为 0,0 与供应商表中的任何 id 都不匹配。我必须更新产品表以将 0 的任何值设置为 NULL,这使得架构更新工作。

在大多数情况下,这是一个简单的自动加载问题

在大多数情况下,只需确保您尝试与之建立关系的实体有一个use语句即可。当 2 个实体不在同一捆绑包中,因此需要自动加载它们时,通常会发生这种情况。要使错误消失,只需执行以下操作:

在您的产品实体中,不要忘记:

use WICSupplierBundleEntitySupplier;

相关内容

  • 没有找到相关文章

最新更新