DELETE 查询在 DQL 学说 Symfony2 中不起作用

DELETE query not working in DQL doctrine Symfony2

我要根据 ID 删除一行,我使用这个查询来完成任务:

 $em = $this->getDoctrine()->getManager();
    $query = $em->createQuery('DELETE buss from StreetBumbApiBundle:BussOwner buss WHERE buss.id = :bussId')
        ->setParameter("bussId", $bussId);
    $list = $query->getResult();

但我收到此错误:

{ "code": 500, "message": "[Semantical Error] line 0, col 7 near 'buss from StreetBumbApiBundle:BussOwner': Error: Class 'buss' is not defined." }

我做错了什么?

您可以使用 QueryBuilder 轻松解决此问题:

$em = $this->getDoctrine()->getManager();
$qb = $em->createQueryBuilder();
$query = $qb->delete('StreetBumbApiBundle:BussOwner', 'buss')
            ->where('buss.id = :bussId')
            ->setParameter('bussId', "bussId")
            ->getQuery();

$query->execute();

顺便说一句:如果将 getQuery 替换为 getDQL,您可以看到这如何转化为 DQL(或 getSQL

你的方法本质上是错误的是你的 Delete 语句中的 from 因为 DQL 中的删除看起来像这样:

$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
              'DELETE StreetBumbApiBundle:BussOwner buss 
               WHERE buss.id = :bussId')
            ->setParameter("bussId", $bussId);

$query->execute();

此外,我不确定您为什么使用 $query->getResult()。 删除的预期结果是什么? $query->execute(); 完成任务。

除此之外,如果您不执行复杂的删除语句,并且在您的情况下,您正在删除使用 Id 查询的实体。

为什么不呢:

$em = $this->getDoctrine()->getManager();
$em->remove($entity);

因此将实体,而不仅仅是 Id 传递给您的删除函数?

备选方案:你的 DQL 不好,试试这个

 $em = $this->getDoctrine()->getManager();
 $query = $em->createQuery(
     'DELETE 
        StreetBumbApiBundle:BussOwner buss 
      WHERE 
        buss.id = :bussId'
      )
      ->setParameter("bussId", $bussId);

 $result = $query->execute();