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.