Doctrine2 join不适用于delete

时间:2014-03-26 11:01:48

标签: php symfony doctrine-orm

在我的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.可能导致问题的原因是什么?

1 个答案:

答案 0 :(得分:1)

我发现了。如果有人需要相同的话:Doctrine QueryBuilder delete with joins

问题是DQL实际上不适用于删除查询中的连接。因此,我们应该使用EntityManager并逐个删除实体或创建另一个峰值。