[英]Doctrine Query Builder delete all entries from Table
我在使用查詢構建器刪除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()
;
}
您只是不能在帶有Doctrine的delete語句中使用連接。 一個機會可能是首先獲取應該刪除您的聯接結果的ID,然后執行一個簡單的'刪除其中的ID'。 這會奏效。
請看這個問題/答案: Doctrine QueryBuilder用連接刪除
從QueryBuilder刪除完全違背了擁有ORM的目的。
您永遠不應該考慮數據庫行,而只考慮您的實體對象。 ORM負責將您的實體映射到(和)表行。
因此,您應該獲取需要刪除的實體集合,並逐一刪除它們 。
嘗試添加b作為$qb->delete(YourEntityForB::class,'b')
return $qb->delete(EntityB::class, "b")
->from(BaseUser::class, 'a')
->where('b.id = :survey')
->setParameter('survey', $surveyId)
->getQuery()
->execute()
;
public function deleteAllEmployees(){
$query = $this->createQueryBuilder('e')
->delete()
->getQuery()
->execute();
return $query;
}
現在, Controller
內部使用實體管理器對象調用此函數,如em->deleteAllEmployees()
。 不要忘記flush()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.