Php Symfony无法执行条令架构更新

Php Symfony无法执行条令架构更新,php,mysql,symfony,doctrine-orm,doctrine,Php,Mysql,Symfony,Doctrine Orm,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':

我在运行条令时遇到了一个问题: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)
我有两个表产生了这个错误:产品和供应商

产品可以有一个供应商,供应商可以有多个产品

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

产品实体:

 /**
 * @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;
我目前在每个表中都有数据。我知道有些产品缺少供应商,供应商也缺少产品

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


非常感谢你的帮助

下面是我如何解决这个问题的。在我的products表中,如果找不到供应商,我将值存储为“0”。由于这两个表之间存在多通多通关系,因此发生了冲突,因为supplier_id从不为0,0与suppliers表中的任何id都不匹配。我必须更新products表,将0的任何值设置为NULL,这使得模式更新工作正常

下面是我如何解决这个问题的。在我的products表中,如果找不到供应商,我将值存储为“0”。由于这两个表之间存在多通多通关系,因此发生了冲突,因为supplier_id从不为0,0与suppliers表中的任何id都不匹配。我必须更新products表,将0的任何值设置为NULL,这使得模式更新工作正常

在大多数情况下,这是一个简单的自动加载问题 在大多数情况下,只需确保您有一个
use
语句用于您试图与之建立关系的实体。 这通常发生在两个实体不在同一个捆绑包中,因此需要自动加载它们时。要使错误消失,只需执行以下操作:

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

use WIC\SupplierBundle\Entity\Supplier;
在大多数情况下,这是一个简单的自动加载问题 在大多数情况下,只需确保您有一个
use
语句用于您试图与之建立关系的实体。 这通常发生在两个实体不在同一个捆绑包中,因此需要自动加载它们时。要使错误消失,只需执行以下操作:

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

use WIC\SupplierBundle\Entity\Supplier;

每次我遇到约束问题时,我只是删除数据库中的整个表,然后让Doctrine再次生成它。这就是我修好它的方式。但是,由于表中有数据,您可以尝试首先对其进行备份,即删除表,让Doctrine生成新表,并在数据中传递每次我遇到约束问题时,我只是删除数据库中的整个表,然后让Doctrine再次生成它。这就是我修好它的方式。但是,由于表中有数据,您可以尝试首先对其进行备份,即删除该表,然后在数据中生成新表