在我的Repository类中,我创建了方法applyCriteria()
:
protected function applyCriteria(QueryBuilder $qb, array $criteria)
{
$qb->leftJoin('co.file', 'file');
$qb->andWhere($qb->expr()->eq('file.someField', $criteria['someField']));
return $qb;
}
我在两种方法中使用它:
public function findByCriteria(array $criteria = [])
{
$qb = $this->applyCriteria($this->createQueryBuilder('co'), $criteria);
return $qb->getQuery()->getResult();
}
public function deleteByCriteria(array $criteria = [])
{
$qb = $this->applyCriteria($this->createQueryBuilder('co'), $criteria);
$qb
->delete()
->getQuery()
->execute()
;
}
所以,findByCriteria()
工作正常,但调用deleteByCriteria()
会抛出Doctrine Exception并显示消息Error: 'file' is not defined.
可能导致问题的原因是什么?
答案 0 :(得分:1)
我发现了。如果有人需要相同的话:Doctrine QueryBuilder delete with joins
问题是DQL实际上不适用于删除查询中的连接。因此,我们应该使用EntityManager并逐个删除实体或创建另一个峰值。