Oracle
とは異なります またはLIMIT
を使用してステートメントを更新します PostgreSQL更新ステートメント
に直接 不可能です。したがって、limit(1)
を連鎖させます compileUpdate
LaravelのPostgresGrammar
のメソッド クエリのコンパイルを担当するクラスは、whereステートメントのみをコンパイルします。
ただし、更新される1つの行のみを返すサブクエリを使用する条件を設定することで、これを克服できます。このようなものが機能するはずです:
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', ...)
条件は、テーブルにid
という名前の列があることを前提としています これは一意の識別子として使用できるため、サブクエリで条件に一致する最初の行を見つけることができます。