Pode ser melhor executar uma consulta com a condição IN em vez 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();
- Benefícios:roda mais rápido, sem necessidade de iteração
- Desvantagens:você não pode usar preRemove
Quanto ao acalorado debate "onde colocá-lo", ouse colocá-lo no controlador, se quiser. Isso depende totalmente de você. No entanto, pode ser mais útil para você no futuro se você colocar o código na classe de repositório de doutrina dedicada. Deve ser muito fácil de fazer e facilita a mudança/manutenção.