使用LIMIT进行Doctrine更新查询

时间:2012-01-17 10:42:59

标签: doctrine doctrine-orm doctrine-query

我想使用LIMIT进行更新查询:

UPDATE anytable SET anycolumn = 'anyvalue' WHERE anothercolumn='anothervalue' LIMIT 20

如何使用doctrine 2.1?

3 个答案:

答案 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();检查为这两个

生成的sql

修改 另一种选择(不强烈推荐)是使用Native SQL