Till skillnad från Oracle
eller MySQL
uppdatera uttalanden med LIMIT
direkt på PostgreSQL-uppdateringsuttalanden
är inte möjligt. Så kedja limit(1)
metod till Query Builder-instansen gör ingenting, eftersom compileUpdate
metod från Laravels PostgresGrammar
klass som är ansvarig för att kompilera frågan, kompilerar endast where-satserna.
Du kan dock övervinna detta genom att ha ett villkor som använder en underfråga som bara returnerar en rad som kommer att uppdateras. Något sådant här borde fungera:
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', ...)
villkoret förutsätter att din tabell har en kolumn med namnet id
som kan användas som en unik identifierare så att den kan hitta den första raden som matchar dina villkor i underfrågan.