php - Symfony 无法执行 Doctrine Schema 更新

标签 php mysql symfony doctrine-orm doctrine

由于外键约束问题,我在运行 doctrine:schema:update --force 时遇到问题。

 [Doctrine\DBAL\DBALException] 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)

我有两个导致此错误的表:Products 和 Suppliers。

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

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

产品实体:

 /**
 * @ORM\ManyToOne(targetEntity="WIC\SupplierBundle\Entity\Supplier", inversedBy="products", fetch="EAGER")
 * @ORM\JoinColumn(name="supplier_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
 * @Common\Versioned
 * @Assert\NotBlank(message="Supplier Cannot Be Blank")
 */
protected $supplier;

供应商实体

 /**
 * @ORM\OneToMany(targetEntity="WIC\ProductBundle\Entity\Product", mappedBy="supplier", cascade={"all"})
 */
protected $products;

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

我做错了什么,我该如何解决这个问题?我需要运行此模式更新,以便我的其他表也得到更新。

非常感谢您的帮助!

最佳答案

这是我解决问题的方法。在我的产品表中,如果找不到供应商,我将值存储为“0”。因为它是两个表之间的多对一和一对多关系,所以它有冲突,因为 supplier_id 永远不会是 0,0 不匹配 suppliers 表中的任何 id。我必须更新产品表以将 0 的任何值设置为 NULL,这使得架构更新有效。

关于php - Symfony 无法执行 Doctrine Schema 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20689781/

相关文章:

没有与数据库紧密耦合并使用存储过程的 PHP 框架?

mysql - Doctrine :使用 count() 和 sum() 进行 1:n 关联的获取

php - 如何在 facebook Graph API 中使用 Javascript 取消评论

javascript - setVisible 不适用于 <option>

php - Laravel 5.7 - 如何动态触发用户验证电子邮件?

具有多表查询的 PHP 邮件功能

php 在弹出窗口中显示特定数据

PHP:将 Google 的 SMTP 中继与 SwiftMailer 结合使用

javascript - Select2 基本示例不起作用

php - 让一个下拉选择框从 Mysql 数据库填充另一个下拉选择框