PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Laravel 5 che aggiorna il limite di riga singola non funziona

Diversamente da Oracle o MySQL aggiornare le istruzioni, utilizzando LIMIT direttamente su Dichiarazioni di aggiornamento PostgreSQL non è possibile. Quindi concatenando il limit(1) metodo all'istanza di Query Builder non fa nulla, perché compileUpdate metodo da PostgresGrammar di Laravel la classe responsabile della compilazione della query, compila solo le istruzioni where.

Potresti tuttavia superare questo problema avendo una condizione che utilizza una sottoquery che restituisce solo una riga che verrà aggiornata. Qualcosa del genere dovrebbe funzionare:

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]);

Il whereIn('id', ...) condizione presuppone che la tabella abbia una colonna denominata id che può essere utilizzato come identificatore univoco in modo che possa trovare la prima riga che corrisponde alle tue condizioni nella sottoquery.