大多数SQL方言都接受以下查询:
SELECT a.foo, b.foo
FROM a, b
WHERE a.x = b.x
SELECT a.foo, b.foo
FROM a
LEFT JOIN b ON a.x = b.x
Run Code Online (Sandbox Code Playgroud)
现在很明显,当您需要外连接时,需要第二种语法.但是在进行内部连接时,为什么我更喜欢第二种语法(反之亦然)?
我正在使用Doctrine 2.5.x,并且在使LIMIT子句适用于UPDATE查询时遇到问题。它总是更新所有匹配的记录(即似乎忽略LIMIT子句)。
setMaxResults() 与UPDATE查询一起使用时似乎无效。
作为一种快速的解决方法,我正在使用本机MySQL查询,但这并不是最佳解决方案。
我尝试了以下示例,但没有一个起作用:
https://recalll.co/app/?q=doctrine2%20-%20Doctrine%20update%20query%20with%20LIMIT
QueryBuilder与setMaxResults()(不起作用):
$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());
Run Code Online (Sandbox Code Playgroud)
希望有人可以找到比本地查询更好的解决方案。它剥夺了ORM的全部优势。
甚至可以在UPDATE语句中使用LIMIT子句吗?