Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Doctrine QueryBuilder löschen mit Joins

Es kann besser sein, eine Abfrage mit IN-Bedingung auszuführen, anstatt sie zu wiederholen.

$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();
  • Vorteile:Läuft schneller, keine Iteration erforderlich
  • Nachteile:Sie können sich nicht in preRemove einklinken

Was die hitzige Debatte "wohin damit" angeht, trauen Sie sich, es in den Controller zu stecken, wenn Sie möchten. Das liegt ganz bei Ihnen. In Zukunft kann es jedoch nützlicher für Sie sein, wenn Sie den Code in der dedizierten Doktrin-Repository-Klasse landen. Es sollte sehr einfach zu machen sein und es einfach machen, es zu ändern/zu warten.