Symfony2 Doctrine正确地从对象中删除ManyToMany关系

时间:2016-09-05 11:31:32

标签: php mysql symfony doctrine-orm

所以我有两个ProductSubcategory对象,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|

而不是完全删除它。

我做错了什么?

0 个答案:

没有答案