5

我正在尝试查询批量删除,但显然它没有执行 JOIN 操作。有什么想法吗?

$queryBuilder = $em
                ->createQueryBuilder()
                ->delete('Bundle:ClassA', 'a')
                ->join('a.classB', 'b')
                ->where('b = :parent')
                ->setParameter('parent', $parent);

      $queryBuilder->getQuery()->execute();

这将返回:

“[语义错误] 第 0 行,'b = :parent AND' 附近的第 38 列:错误:'b' 未定义。”

4

2 回答 2

4

DQL 不支持 DELETE 和 UPDATE 中的连接,即使底层数据库(如 MySQL)支持它。

这是最快的解决方法:

$results = $em
    ->createQueryBuilder()
    ->select('Bundle:ClassA', 'a')
    ->join('a.classB', 'b')
    ->where('b = :parent')
    ->setParameter('parent', $parent)
    ->getQuery()->getResult();

foreach ($results as $result){
    $em->remove($result);
}

$em->flush();
于 2015-07-02T09:34:24.097 回答
3

尝试这个 :

$queryBuilder = $em
                ->createQueryBuilder()
                ->delete('Bundle:ClassA', 'a')
                ->innerJoin('a.classB', 'b')
                ->where($qb->expr()->eq('b', ':parent'))
                ->setParameter(':parent', $parent);

      $queryBuilder->getQuery()->execute();
于 2013-11-10T21:41:57.407 回答