使用QueryBuilder删除Symfony2 Bulk

时间:2013-11-10 21:00:56

标签: symfony doctrine

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

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

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

返回:

  

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

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:3)

试试这个:

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

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