Php 删除级联中不在多个关系中工作的实体

Php 删除级联中不在多个关系中工作的实体,php,mysql,symfony,doctrine,Php,Mysql,Symfony,Doctrine,我有一个父实体类别和一个子实体文章。它们由许多关系定义。可以在一个或多个类别中标记一篇文章,并且可以在多篇文章中标记每个类别 我想做的事 我希望当我删除一个类别时,该类别中标记的每一篇文章也会被删除,但前提是它们没有被其他类别标记 我已经测试过的内容 我测试了两个类别(id=1和id=2)和两篇文章(id=71和id=91)。 第七十一条包括第一类和第二类。第91条仅与第2类相关。 因此,在删除第2类时,我希望删除第91条,而不是第71条(因为这一条仍然与第1类相关) 但无论我怎么努力,这些都没

我有一个父实体类别和一个子实体文章。它们由许多关系定义。可以在一个或多个类别中标记一篇文章,并且可以在多篇文章中标记每个类别

我想做的事
我希望当我删除一个类别时,该类别中标记的每一篇文章也会被删除,但前提是它们没有被其他类别标记

我已经测试过的内容
我测试了两个类别(id=1和id=2)和两篇文章(id=71和id=91)。 第七十一条包括第一类和第二类。第91条仅与第2类相关。
因此,在删除第2类时,我希望删除第91条,而不是第71条(因为这一条仍然与第1类相关)

但无论我怎么努力,这些都没有发生

在下图中,我总结了使用不同策略得到的结果(1/cascade={“remove”},2/orphandremove=true和3/ondelete=“cascade”)。
绿色中从数据库中删除

我的代码(代码的一部分)

在控制器中

对于策略1/cascade={“删除”}

对于策略2/删除=true

对于策略3/onDelete=“CASCADE”

我的问题


除了我已经尝试过的3种策略或那些删除操作必须在控制器中完成外,还有其他方法吗

就我所能想到的,仅仅使用级联功能是无法做到这一点的

一个干净的解决方案是创建一个订阅
preRemove
事件的侦听器。
然后,您可以检查某个类别何时被删除,并查找该类别中没有任何其他类别的所有文章,并将其删除。

ok Waaghals我将尝试事件,或者直接在控制器中执行(直接在控制器中执行此操作没有错?对吗?)
public function deleteCategory(Category $category)
{
  $em = $this->getDoctrine()->getManager();
  $em->remove($category);
  $em->flush();
}
 // IN CLASS/ENTITY CATEGORY - OWNER OF THE RELATION
 * @ORM\ManyToMany(targetEntity="Article", inversedBy="categories",  cascade={ "remove"})
 private $articles;

 // IN CLASS/ENTITY ARTICLE 
 * @ORM\ManyToMany(targetEntity="Category", mappedBy="articles")
 private $categories;
 // IN CLASS/ENTITY CATEGORY - OWNER OF THE RELATION
 * @ORM\ManyToMany(targetEntity="Article", inversedBy="categories",  orphanRemoval=true)
 private $articles;

 // IN CLASS/ENTITY ARTICLE 
 * @ORM\ManyToMany(targetEntity="Category", mappedBy="articles")
 private $categories;
 // IN CLASS/ENTITY CATEGORY - OWNER OF THE RELATION
 * @ORM\ManyToMany(targetEntity="Article", inversedBy="categories")
 private $articles;

 // IN CLASS/ENTITY ARTICLE 
 * @ORM\ManyToMany(targetEntity="Category", mappedBy="articles")
 * @ORM\JoinColumn(onDelete="CASCADE")

 private $categories;