Mysql
 sql >> Base de données >  >> RDS >> Mysql

Doctrine QueryBuilder supprimer avec des jointures

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.