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.