次のようなLIMITを使用してupdate-queryを実行したいと思います。
UPDATE anytable SET anycolumn = 'anyvalue' WHERE anothercolumn='anothervalue' LIMIT 20
これはDoctrine2.1でどのように可能ですか?
次のようなLIMITを使用してupdate-queryを実行したいと思います。
UPDATE anytable SET anycolumn = 'anyvalue' WHERE anothercolumn='anothervalue' LIMIT 20
これはDoctrine2.1でどのように可能ですか?
entityManagerから接続をフェッチし、executeUpdateを呼び出す必要があることがわかりました。
$em->getConnection()->executeUpdate(
"UPDATE anytable SET anycolumn = 'anyvalue'
WHERE anothercolumn='anothervalue'
LIMIT 20");
ネイティブクエリに関する教義のページには次のように書かれています。
DELETE、UPDATE、またはINSERTステートメントを実行する場合、ネイティブSQL APIは使用できず、エラーがスローされる可能性があります。EntityManager#getConnection()を使用してネイティブデータベース接続にアクセスし、これらのクエリに対してexecuteUpdate()メソッドを呼び出します。
教義に固有ではありませんが、サブクエリで可能かもしれませんか?
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つの異なる方法でそれについて行くことができます:
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を使用することです