2

次のようなLIMITを使用してupdate-queryを実行したいと思います。

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

これはDoctrine2.1でどのように可能ですか?

4

3 に答える 3

4

entityManagerから接続をフェッチし、executeUpdateを呼び出す必要があることがわかりました。

$em->getConnection()->executeUpdate(
    "UPDATE anytable SET anycolumn = 'anyvalue'
     WHERE anothercolumn='anothervalue'
     LIMIT 20");

ネイティブクエリに関する教義のページには次のように書かれています。

DELETE、UPDATE、またはINSERTステートメントを実行する場合、ネイティブSQL APIは使用できず、エラーがスローされる可能性があります。EntityManager#getConnection()を使用してネイティブデータベース接続にアクセスし、これらのクエリに対してexecuteUpdate()メソッドを呼び出します。

于 2012-07-19T16:34:46.020 に答える
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
 );
于 2012-01-17T12:50:07.773 に答える
-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();

あなたがすべきこと:$query->getSQL();これら2つのために生成されたSQLをチェックするためにecho

編集: 別の代替手段(強くお勧めしません)は、ネイティブSQLを使用することです

于 2012-01-17T16:23:17.563 に答える