【发布时间】:2017-05-27 11:26:15
【问题描述】:
我正在使用 Doctrine 2.5.x,但在让 LIMIT 子句用于 UPDATE 查询时遇到问题。它总是更新所有匹配的记录(即它似乎忽略了 LIMIT 子句)。
setMaxResults() 与 UPDATE 查询一起使用时似乎没有效果。
作为一种快速解决方法,我使用的是原生 MySQL 查询,但这不是最佳解决方案。
我尝试了这些示例,但没有一个有效:
Doctrine update query with LIMIT
https://recalll.co/app/?q=doctrine2%20-%20Doctrine%20update%20query%20with%20LIMIT
带有setMaxResults() 的QueryBuilder(不起作用):
$qb = $em->createQueryBuilder();
$query = $qb->update('\Task\Entity', 't')
->set('t.ClaimedBy', 1)
->where('t.Claimed IS NULL')
->getQuery();
$query->setMaxResults(20);
$this->log($query->getSQL());
希望有人可以帮助找到比原生查询更好的解决方案。它带走了 ORM 的全部好处。
是否可以在 UPDATE 语句中使用 LIMIT 子句?
【问题讨论】:
-
阅读Doctrine Query Builder 和Limiting the Result。 PS:实际上你的帖子有点跑题了,因为它听起来更像是一个教程请求。
-
感谢您的反馈,但我不是菜鸟。您是否测试过建议的链接?它不工作。它适用于 SELECT 但不适用于更新查询。我可以发布伪 DQL 或 QueryBuilder 代码,但这不会改变 setMaxResults 不适用于更新查询的事实。所以我不明白为什么它离题了。不过还是谢谢
-
是的,为了更易于理解和切题,只需使用您遇到的示例查询构建器更新您的问题。阅读How to Ask a Question on StackOverflow 以便能够相应地改进您的问题。
-
完成。好奇你现在是否明白为什么它不应该工作。
-
乍一看您的 QueryBuilder 示例,您忘记了
$query->execute();查询(但也许您只是忘记复制/粘贴它)。其余的似乎是对的。
标签: php symfony doctrine-orm doctrine