所以我有两个Product
和Subcategory
对象,ManyToMany
关系。该关系保存在名为ProductSubcategory
的第三个表中。
问题在于,如果我尝试从产品中删除子类别,我会收到外部约束错误(我无法从ProductSubcategory中删除,因为它的值已映射到现有对象)。
所以我做的是将onDelete=SET NULL
添加到我的ManyToMany
表中。现在我可以删除子类别,但它的作用是将字段product
设置为NULL而不是删除整个事物。
在产品中我有:
/**
* @var \Mp\ShopBundle\Entity\ProductSubcategory
* @ORM\OneToMany(targetEntity="\Mp\ShopBundle\Entity\ProductSubcategory", mappedBy="product", cascade={"persist"}, orphanRemoval=true)
*/
private $subcategory;
以及删除子类别的函数:
/**
* Remove subcategory
*
* @param \Mp\ShopBundle\Entity\ProductSubcategory $subcategory
*/
public function removeSubcategory(\Mp\ShopBundle\Entity\ProductSubcategory $subcategory) {
foreach ($this->subcategory as $k => $s) {
if ($s->getId() == $subcategory->getId()) {
unset($this->subcategory[$k]);
}
}
}
ProductsSubcategory
是一个ManyToMany
表,我保存了这段关系:
/**
* @var \Mp\ShopBundle\Entity\Product
* @ORM\ManyToOne(targetEntity="\Mp\ShopBundle\Entity\Product", inversedBy="subcategory")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="product_id", referencedColumnName="id", onDelete="SET NULL")
* })
*/
private $product;
所以,如果我这样做:
$product->removeSubcategory($subcategory);
在数据库中它只是使其为null:
id|subcategory_id|product_id|
1 |2 | NULL|
而不是完全删除它。
我做错了什么?