W przeciwieństwie do Oracle
lub MySQL
aktualizuj instrukcje, używając LIMIT
bezpośrednio w wyciągach aktualizacji PostgreSQL
nie jest możliwe. Więc łączenie limit(1)
metoda do instancji Query Builder nic nie robi, ponieważ compileUpdate
metoda z PostgresGrammar
Laravela klasa, która jest odpowiedzialna za kompilację zapytania, kompiluje tylko instrukcje where.
Możesz jednak obejść ten problem, stosując warunek, który używa podzapytania, które zwraca tylko jeden wiersz, który zostanie zaktualizowany. Coś takiego powinno działać:
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', ...)
warunek zakłada, że twoja tabela ma kolumnę o nazwie id
który może być używany jako unikalny identyfikator, aby mógł znaleźć pierwszy wiersz, który pasuje do warunków w podzapytaniu.