In tegenstelling tot Oracle
of MySQL
update-instructies, met behulp van LIMIT
rechtstreeks op PostgreSQL-update-statements
is niet mogelijk. Dus het koppelen van de limit(1)
methode naar de Query Builder-instantie doet niets, omdat de compileUpdate
methode uit Laravel's PostgresGrammar
class die verantwoordelijk is voor het compileren van de query, compileert alleen de waar-instructies.
U kunt dit echter ondervangen door een voorwaarde te hebben die een subquery gebruikt die slechts één rij retourneert die wordt bijgewerkt. Iets als dit zou moeten werken:
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]);
De whereIn('id', ...)
voorwaarde gaat ervan uit dat uw tabel een kolom heeft met de naam id
die kan worden gebruikt als een unieke identificatie, zodat deze de eerste rij kan vinden die overeenkomt met uw voorwaarden in de subquery.