Doctrine Query Builder删除Table中的所有条目

时间:2016-10-03 18:53:18

标签: php symfony doctrine-orm

我在使用查询构建器删除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()
        ;
}

5 个答案:

答案 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()