Il peut être préférable d'exécuter une requête avec la condition IN plutôt que de l'itérer.
$ids = $this->createQueryBuilder('product')
->join('..your joins..')
->where('..your wheres..')
->select('product.id')
->getQuery()->getResult();
$this->createQueryBuilder('product')
->where('product.id in (:ids)')
->setParameter('ids', $ids)
->delete()
->getQuery()
->execute();
- Avantages :s'exécute plus rapidement, pas besoin d'itérer
- Inconvénients :vous ne pouvez pas vous connecter à preRemove
Quant au débat animé "où le mettre", osez le mettre dans le contrôleur si vous le souhaitez. Cela dépend entièrement de vous. Cependant, il peut vous être plus utile à l'avenir de placer le code dans la classe de référentiel de doctrine dédiée. Cela devrait être très facile à faire et le rendre facile à changer/maintenir.