A diferencia de Oracle
o MySQL
actualizar declaraciones, usando LIMIT
directamente en instrucciones de actualización de PostgreSQL
no es posible. Así que encadenando el limit(1)
a la instancia de Query Builder no hace nada, porque compileUpdate
método de PostgresGrammar
de Laravel clase que es responsable de compilar la consulta, solo compila las declaraciones where.
Sin embargo, podría superar esto al tener una condición que use una subconsulta que solo devuelva una fila que se actualizará. Algo como esto debería funcionar:
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]);
El whereIn('id', ...)
la condición asume que su tabla tiene una columna llamada id
que se puede usar como un identificador único para que pueda encontrar la primera fila que coincida con sus condiciones en la subconsulta.