我正在尝试覆盖产品捆绑包,我成功了,但在尝试删除将产品作为子级的父实体时出现错误
这是映射文件 product.orm.xml
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:gedmo="http://gediminasm.org/schemas/orm/doctrine-extensions-mapping">
<mapped-superclass name="Sylius'Component'Product'Model'Product" table="sylius_product">
<id name="id" column="id" type="integer">
<generator strategy="AUTO" />
</id>
<field name="name" column="name" type="string">
<gedmo:versioned />
</field>
...
</mapped-superclass>
</doctrine-mapping>
这是我的产品.orm.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="WeShop'Bundle'CoreBundle'Entity'Product" table="sylius_product">
<many-to-one field="boutique" target-entity="WeShop'Bundle'BoutiqueBundle'Entity'Boutique" inversed-by="produits">
<join-column name="boutique_id" referenced-column-name="id" nullable="true" onDelete="SET NULL" />
</many-to-one>
</entity>
</doctrine-mapping>
in WeShop''Bundle''BoutiqueBundle''Entity''Boutique 我确实有
<?php
namespace WeShop'Bundle'BoutiqueBundle'Entity;
use Sylius'Component'Core'Model'ProductInterface as ProductInterface;
use Doctrine'ORM'Mapping as ORM;
use Doctrine'Common'Collections'ArrayCollection;
class Boutique
{
private $produits;
public function __construct(){
$this->produits = new ArrayCollection();
}
public function getProduits(){
return $this->produits;
}
public function setProduits(ProductInterface $produit){
$this->produits[] = $produit;
return $this;
}
}
在WeShop''Bundle''CoreBundle''Entity''Product 中,我确实有这个
<?php
namespace WeShop'Bundle'CoreBundle'Entity;
use WeShop'Bundle'CoreBundle'Model;
use WeShop'Bundle'BoutiqueBundle'Entity'BoutiqueInterface as BoutiqueInterface;
use Sylius'Component'Core'Model'Product as BaseProduct;
class Product extends BaseProduct
{
private $boutique;
public function getBoutique()
{
return $this->boutique;
}
public function setBoutique(BoutiqueInterface $boutique = null)
{
$this->boutique = $boutique;
return $this;
}
}
使用精品实体(商店(,我可以按照我想要的方式操纵它,现在的问题是当我尝试删除它时,我得到
An exception occurred while executing 'DELETE FROM weshop_boutique WHERE id = ?' with params [2]:
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`sylius_dev`.`sylius_product`, CONSTRAINT `FK_677B9B74AB677BE6` FOREIGN KEY (`boutique_id`) REFERENCES `weshop_boutique` (`id`))
请注意,一家精品店(商店(可以有多个产品,但一个产品只能是一个精品店(商店(的子产品
我确实有一个具有相同逻辑的文档包,当我尝试删除精品店时(知道在表中没有引用精品店{null}sylius_product(,文档被删除
这是我的文档 orm XML 文件
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity table="weshop_documents" repository-class="WeShop'Bundle'DocumentsBundle'Entity'DocumentsRepository" name="WeShop'Bundle'DocumentsBundle'Entity'Documents">
<id name="id" type="integer" column="id">
<generator strategy="AUTO"/>
</id>
<field name="intitule" type="string" column="intitule" length="255"/>
<field name="url" type="string" column="url" length="255"/>
<many-to-one field="boutique" target-entity="WeShop'Bundle'BoutiqueBundle'Entity'Boutique" inversed-by="documents">
<join-column name="boutique_id" referenced-column-name="id" nullable="false" />
</many-to-one>
</entity>
</doctrine-mapping>
提前谢谢你
Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`sylius_dev`.`sylius_product`, CONSTRAINT `FK_677B9B74AB677BE6` FOREIGN KEY (`boutique_id`) REFERENCES `weshop_boutique` (`id`))
如果我理解,那么这是此错误的解决方案。
-
您在
sylius_product
<=>weshop_boutique
之间存在关系。 因此,当您创建产品时,您将id
weshop_boutique
传递给sylius_product
表。 -
因此,当您想从
weship_boutique
中删除与sylius_product
有关系的内容时,首先您必须从sylius_product
与weship_boutique
有关系的产品中删除产品,然后才能正常工作。 -
例如
=> you have one field in "weship_boutique" table where "id = 1". => you have one field in "sylius_product" table where "boutique_id = 1". => so when you would like to delete field from "weship_boutique" table where "id = 1" at the same time "sylius_product" need it because you have foreign key relation between (boutique_id) of table sylius_product and (id) of table "weship_boutique".
因此,首先从sylius_product中删除产品(ID 为 weship_boutique(,然后尝试从weship_boutique中删除字段。