sql >> Base de Datos >  >> RDS >> PostgreSQL

Laravel 5 actualizando el límite de una sola fila no funciona

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.