繰り返すよりも、IN条件でクエリを実行する方がよい場合があります。
$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();
- 利点:実行速度が速く、反復する必要がありません
- 欠点:preRemoveにフックすることはできません
「どこに置くか」という白熱した議論については、必要に応じてあえてコントローラーに入れてください。それは完全にあなた次第です。ただし、コードを専用のドクトリンリポジトリクラスに配置すると、将来的にはさらに役立つ可能性があります。非常に簡単に実行でき、変更や保守が簡単になります。