Không giống với Oracle
hoặc MySQL
cập nhật báo cáo, sử dụng LIMIT
trực tiếp trên câu lệnh cập nhật PostgreSQL
là không thể. Vì vậy, chuỗi giới hạn limit(1)
phương thức đối với phiên bản Trình tạo truy vấn không làm gì cả vì compileUpdate
phương thức từ PostgresGrammar
của Laravel lớp chịu trách nhiệm biên dịch truy vấn, chỉ biên dịch các câu lệnh where.
Tuy nhiên, bạn có thể khắc phục điều này bằng cách có một điều kiện sử dụng truy vấn con chỉ trả về một hàng sẽ được cập nhật. Một cái gì đó như thế này sẽ hoạt động:
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', ...)
điều kiện giả sử bảng của bạn có một cột có tên id
có thể được sử dụng làm số nhận dạng duy nhất để nó có thể tìm thấy hàng đầu tiên phù hợp với điều kiện của bạn trong truy vấn con.