eliminar entidades en cascada no funciona en la relación ManyToMany

Tengo una Categoría de entidad padre y un Artículo de entidad hijo. Están definidos por una relación ManyToMany. Se puede etiquetar un artículo en una o más categorías y cada categoría se puede etiquetar en más de un Artículo.

LO QUE TRATE DE HACER
Me gustaría que cuando elimine una Categoría, también se eliminen todos los artículos etiquetados en la Categoría PERO solo si no están etiquetados por otra Categoría.

LO QUE HE PROBADO YA
Probé con 2 categorías (id = 1 e id = 2) y con dos artículos (id = 71 e id = 91). el artículo 71 tiene tanto la categoría 1 como la 2. El artículo 91 está vinculado únicamente con la categoría 2.
Así que cuando elimine la categoría 2, espero eliminar el artículo 91, pero no el artículo 71 (ya que este todavía está vinculado con la categoría_1)

Pero nada de esto sucedió lo que sea que intenté …

En la siguiente imagen , resumí lo que obtengo usando diferentes estrategias (1 / cascade = {“remove”}, 2 / orphanRemoval = true y 3 / ondelete = “CASCADE”).
En verde, la eliminación de la base de datos.

enter image description here

MI CÓDIGO (PARTE DEL CÓDIGO)

en el controlador

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

para la estrategia 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; 

para la estrategia 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; 

para la estrategia 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; 

MI PREGUNTA

¿Hay alguna otra forma de hacerlo, pero las 3 estrategias que ya probé o las eliminaciones tienen que hacerse en el controlador?

No se puede hacer esto usando solo funciones en cascada, hasta donde puedo pensar.

Una solución limpia sería crear un oyente que se suscriba a los eventos preRemove . Luego puede verificar cuándo se borra una categoría y encontrar todos los artículos de esa categoría que no tienen ninguna otra categoría y eliminarlos también.