Bạn sẽ có thể thực hiện một lựa chọn trên bảng lệnh, sử dụng một liệu WHERE để tìm ra max (id
) trong một subquery, như thế này:
DB::table('orders')->where('id', DB::raw("(select max(`id`) from orders)"))->get();
Nếu bạn muốn sử dụng hùng biện (ví dụ, vì vậy bạn có thể chuyển đổi phản ứng của bạn đến một đối tượng), bạn sẽ muốn sử dụng whereRaw, bởi vì một số chức năng như toJSON
hoặc toArray
sẽ không làm việc mà không sử dụng mô hình hùng hồn.
$order = Orders::whereRaw('id = (select max(`id`) from orders)')->get();
Điều đó, tất nhiên, yêu cầu bạn phải có mô hình mở rộng Eloquent.
class Orders extends Eloquent {}
Như đã đề cập trong các ý kiến, bạn không cần phải sử dụng whereRaw
, bạn có thể làm toàn bộ truy vấn bằng cách sử dụng xây dựng truy vấn mà không SQL thô.
// Using the Query Builder
DB::table('orders')->find(DB::table('orders')->max('id'));
// Using Eloquent
$order = Orders::find(DB::table('orders')->max('id'));
(Lưu ý rằng nếu trường id
không phải là độc đáo, bạn sẽ chỉ nhận được một hàng lại -. Điều này là do find()
sẽ chỉ trả lại kết quả đầu tiên từ máy chủ SQL).
nó có thể làm cho nó chuỗi 'toArray()'? Tôi gặp lỗi nếu tôi nối thêm với -> toArray(). – Shiro
@Shiro 'toArray()' là một phương thức mô hình của Eloquent, không phải của DB. Thay vào đó, bạn sẽ cần sử dụng 'whereRaw()'. Tôi đã cập nhật câu trả lời của mình. – timgws
cảm ơn câu trả lời của bạn, tôi có thể biết tại sao bạn đặt mảng (25) cho nó? – Shiro