我正在尝试对批量删除进行查询,但显然它没有执行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'未定义。“
答案 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();