Contrairement à Oracle
ou MySQL
mettre à jour les instructions, en utilisant LIMIT
directement sur instructions de mise à jour PostgreSQL
n'est pas possible. Donc enchaîner le limit(1)
à l'instance de Query Builder ne fait rien, car compileUpdate
méthode de PostgresGrammar
de Laravel responsable de la compilation de la requête, ne compile que les instructions where.
Vous pouvez cependant surmonter cela en ayant une condition qui utilise une sous-requête qui ne renvoie qu'une seule ligne qui sera mise à jour. Quelque chose comme ceci devrait fonctionner :
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]);
Le whereIn('id', ...)
condition suppose que votre table a une colonne nommée id
qui peut être utilisé comme identifiant unique afin qu'il puisse trouver la première ligne qui correspond à vos conditions dans la sous-requête.