2014-03-26 30 views
0

在我的倉庫類我創建方法applyCriteria()Doctrine2加入不與作品刪除

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()用消息Error: 'file' is not defined.拋出Doctrine異常可能導致此問題的原因是什麼?

回答

1

我找到了。如果有人需要相同的:Doctrine QueryBuilder delete with joins

問題是,DQL真的不能在刪除查詢中使用連接。所以我們應該使用EntityManager並逐個刪除實體或創建另一個尖峯。