I modsætning til Oracle
eller MySQL
opdater erklæringer ved hjælp af LIMIT direkte på PostgreSQL-opdateringserklæringer
er ikke muligt. Så kæde limit(1) metoden til Query Builder-instansen ikke gør noget, fordi compileUpdate
metode fra Laravels PostgresGrammar klasse, der er ansvarlig for at kompilere forespørgslen, kompilerer kun where-sætningerne.
Du kan dog overvinde dette ved at have en betingelse, der bruger en underforespørgsel, som kun returnerer én række, der vil blive opdateret. Noget som dette burde virke:
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', ...) betingelse antager, at din tabel har en kolonne med navnet id der kan bruges som en unik identifikator, så den kan finde den første række, der matcher dine betingelser i underforespørgslen.