Na rozdíl od Oracle
nebo MySQL
aktualizovat výpisy pomocí LIMIT
přímo na příkazy k aktualizaci PostgreSQL
není možné. Takže zřetězení limit(1)
metoda k instanci Query Builder nedělá nic, protože compileUpdate
metoda z Laravelova PostgresGrammar
třída, která je zodpovědná za kompilaci dotazu, kompiluje pouze příkazy where.
Můžete to však překonat tím, že budete mít podmínku, která používá poddotaz, který vrací pouze jeden řádek, který bude aktualizován. Něco takového by mělo fungovat:
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]);
whereIn('id', ...)
podmínka předpokládá, že vaše tabulka má sloupec s názvem id
který lze použít jako jedinečný identifikátor, aby mohl najít první řádek, který odpovídá vašim podmínkám v poddotazu.