DELETE查询在DQL doctrine Symfony2中不起作用

Gee*_*ika 5 dql symfony doctrine-orm

我要删除基于ID的行,我使用此查询来执行任务:

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

但我收到这个错误:

{"code":500,"message":"[语义错误]第0行,第7行附近'来自StreetBumbApiBundle的Buss:BussOwner':错误:未定义类'buss'." }

我在做什么错了?

Der*_*fel 14

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

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

$query->execute();
Run Code Online (Sandbox Code Playgroud)

BTW:如果您更换getQuerygetDQL你可以看到这是如何转化为DQL(或getSQL)

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

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

$query->execute();
Run Code Online (Sandbox Code Playgroud)

另外,我不确定你为什么使用$query->getResult().删除的预期结果是什么?$query->execute();做的工作.

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

为什么不:

$em = $this->getDoctrine()->getManager();
$em->remove($entity);
Run Code Online (Sandbox Code Playgroud)

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