我想使用LIMIT进行更新查询:
UPDATE anytable SET anycolumn = 'anyvalue' WHERE anothercolumn='anothervalue' LIMIT 20
如何使用doctrine 2.1?
答案 0 :(得分:4)
我发现我必须从entityManager获取连接并调用executeUpdate:
$em->getConnection()->executeUpdate(
"UPDATE anytable SET anycolumn = 'anyvalue'
WHERE anothercolumn='anothervalue'
LIMIT 20");
doctrine page about native queries说:
如果要执行Native的DELETE,UPDATE或INSERT语句 SQL API无法使用,可能会抛出错误。使用 EntityManager#getConnection()访问本机数据库连接 并为这些查询调用executeUpdate()方法。
答案 1 :(得分:2)
不是特定于学说,但也许可以使用子查询?
UPDATE messages SET test_read=1
WHERE id IN (
SELECT id FROM (
SELECT id FROM messages
ORDER BY date_added DESC
LIMIT 5, 5
) tmp
);
答案 2 :(得分:-2)
修改强>
你可以通过两种不同的方式解决这个问题:
1 - 使用DQL直接创建查询:
$query = $entityManager->createQuery('UPDATE Entities\User u SET u.someValue = newValue WHERE u.id = someId');
// this will add the LIMIT statement
$query->setMaxResults(20);
$query->execute();
2 - 使用QueryBuilder创建查询:
$qb = $this->_em->createQueryBuilder();
$query = $qb->update('Entities\User', 'u')
->set('u.someValue', newValue)
->where('u.id = someId')
->getQuery();
// this will add the LIMIT statement
$query->setMaxResults(20);
$query->execute();
你应该这样做:echo $query->getSQL();
检查为这两个
修改强> 另一种选择(不强烈推荐)是使用Native SQL