sql >> Base de Datos >  >> RDS >> Mysql

Eliminación de Doctrine QueryBuilder con uniones

Puede ser mejor ejecutar una consulta con la condición IN en lugar de iterar.

$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();
  • Beneficios:se ejecuta más rápido, sin necesidad de iterar
  • Inconvenientes:no puede conectarse a preRemove

En cuanto al acalorado debate sobre "dónde ponerlo", atrévase a ponerlo en el controlador si lo desea. Eso depende completamente de ti. Sin embargo, puede ser más útil para usted en el futuro si coloca el código en la clase de repositorio de doctrina dedicada. Debe ser muy fácil de hacer y facilita el cambio/mantenimiento.