PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Laravel 5 atualizando o limite de linha única não funciona


Ao contrário do Oracle ou MySQL instruções de atualização, usando LIMIT diretamente em instruções de atualização do PostgreSQL não é possível. Então, encadeando o limit(1) para a instância do Query Builder não faz nada, porque o compileUpdate método do PostgresGrammar do Laravel classe que é responsável por compilar a consulta, apenas compila as instruções where.

No entanto, você pode superar isso tendo uma condição que usa uma subconsulta que retorna apenas uma linha que será atualizada. Algo assim deve 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]);

O whereIn('id', ...) condição assume que sua tabela tem uma coluna chamada id que pode ser usado como um identificador exclusivo para localizar a primeira linha que corresponda às suas condições na subconsulta.