我在使用查询构建器删除id找到的所有记录时遇到了一些问题 我试着像波纹管代码,但我总是得到这个错误:
[Semantical Error] line 0, col 53 near 'b.id = :surv': Error: 'b' is not defined.
方法:
public function deleteUsers($surveyId) {
$qb = $this->getEntityManager()->createQueryBuilder();
return $qb
->delete()
->from(BaseUser::class, 'a')
->leftJoin('a.survey', 'b')
->where('b.id = :survey')
->setParameter('survey', $surveyId)
->getQuery()
->execute()
;
}
答案 0 :(得分:1)
你根本不能在带有Doctrine的delete语句中使用连接。 一个机会可能是首先删除应该删除您的联接结果的ID,然后执行简单的删除'中的ID。这将有效。
请同时查看此问题/答案:Doctrine QueryBuilder delete with joins
答案 1 :(得分:1)
从QueryBuilder删除完全违背了拥有ORM的目的。
您永远不应该考虑数据库行,而只考虑您的实体对象。 ORM负责将您的实体映射到(和)表行。
因此,您应该获取需要删除的实体的集合,并逐个删除。
答案 2 :(得分:0)
尝试将b添加为$qb->delete(YourEntityForB::class,'b')
答案 3 :(得分:0)
return $qb->delete(EntityB::class, "b")
->from(BaseUser::class, 'a')
->where('b.id = :survey')
->setParameter('survey', $surveyId)
->getQuery()
->execute()
;
答案 4 :(得分:0)
public function deleteAllEmployees(){
$query = $this->createQueryBuilder('e')
->delete()
->getQuery()
->execute();
return $query;
}
现在,在Controller
内部,使用em->deleteAllEmployees()
之类的实体管理器对象调用此函数。不要忘记flush()
。