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();
我要根据 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();