удаление объектов в каскаде, не работающих в отношениях ManyToMany

У меня есть родительская сущность Категория и статья дочернего субъекта. Они определяются отношением ManyToMany. Одна статья может быть представлена ​​в одной или нескольких категориях, и каждая категория может быть помечена более чем в одной статье.

ЧТО Я ПЫТАЮСЬ ДЕЛАТЬ
Я хотел бы, чтобы при удалении категории каждая статья, помеченная в категории, также удалялась, но только если они не помечены другой категорией.

ЧТО Я УЖЕ ИСПЫТАЛ
Я тестировал 2 категории (id = 1 и id = 2) и с двумя статьями (id = 71 и id = 91). статья 71 имеет как категории 1, так и 2. Статья 91 связана только с категорией 2.
Поэтому при удалении категории 2 я ожидаю удалить статью 91, но не статью 71 (так как эта связь все еще связана с категорией_1)

Но ничего из этого не случилось, что я пробовал …

На следующем рисунке я подвел итог тому, что я использую для разных стратегий (1 / cascade = {"remove"}, 2 / orphanRemoval = true и 3 / ondelete = "CASCADE").
В зеленом виде удаление из базы данных.

введите описание изображения здесь

МОЙ КОД (ЧАСТЬ КОДА)

в контроллере

public function deleteCategory(Category $category) { $em = $this->getDoctrine()->getManager(); $em->remove($category); $em->flush(); } 

для стратегии 1 / cascade = {"remove"}

  // 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; 

для стратегии 2 / orphanRemoval = true

  // 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; 

для стратегии 3 / onDelete = "CASCADE"

  // 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; 

МОЙ ВОПРОС

есть ли другой способ сделать это, но три стратегии, которые я уже пробовал, или эти удаления должны быть сделаны в контроллере?

Вы не можете сделать это, используя только каскадные функции, насколько я могу себе представить.

preRemove решением будет создание слушателя, который подписывается на события preRemove . Затем вы можете проверить, когда удалена категория, и найти все статьи из этой категории, которые не имеют других категорий и удаляют их.