Anders bei Oracle
oder MySQL
update-Anweisungen mit LIMIT
direkt auf PostgreSQL-Update-Anweisungen
Ist nicht möglich. Also das limit(1)
verketten -Methode an die Query Builder-Instanz nichts bewirkt, da die compileUpdate
-Methode aus Laravels PostgresGrammar
Klasse, die für das Kompilieren der Abfrage verantwortlich ist, kompiliert nur die Where-Anweisungen.
Sie könnten dies jedoch umgehen, indem Sie eine Bedingung verwenden, die eine Unterabfrage verwendet, die nur eine Zeile zurückgibt, die aktualisiert wird. So etwas sollte funktionieren:
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]);
Der whereIn('id', ...)
Bedingung geht davon aus, dass Ihre Tabelle eine Spalte mit dem Namen id
hat der als eindeutiger Bezeichner verwendet werden kann, damit er die erste Zeile finden kann, die Ihren Bedingungen in der Unterabfrage entspricht.