Berbeda dengan Oracle
atau MySQL
perbarui pernyataan, menggunakan LIMIT
langsung di Pernyataan pembaruan PostgreSQL
itu tidak mungkin. Jadi merantai limit(1)
metode ke instance Query Builder tidak melakukan apa-apa, karena compileUpdate
metode dari PostgresGrammar
Laravel class yang bertanggung jawab untuk mengkompilasi query, hanya mengkompilasi pernyataan where.
Namun Anda bisa mengatasinya dengan memiliki kondisi yang menggunakan subquery yang hanya mengembalikan satu baris yang akan diperbarui. Sesuatu seperti ini seharusnya bekerja:
DB::table("records")->whereIn('id', function ($query) use ($date_now) {
$query->from('records')
->select('id')
->where('need_moderate', '=', 'no')
->where('locked_per_time', '<', $date_now->format("Y-m-d H:i:s"))
->limit(1);
})->update(["locked_per_time" => $locked_per->format("Y-m-d H:i:s"), 'locked_by' => $mdkey]);
whereIn('id', ...)
kondisi mengasumsikan tabel Anda memiliki kolom bernama id
yang dapat digunakan sebagai pengidentifikasi unik sehingga dapat menemukan baris pertama yang cocok dengan kondisi Anda di subquery.