Khi sử dụng, ->get()
bạn không thể sử dụng bất kỳ cách nào dưới đây:
if (empty($result)) { }
if (!$result) { }
if ($result) { }
Bởi vì nếu bạn dd($result);
sẽ nhận thấy một trường hợp Illuminate\Support\Collection
luôn được trả về, ngay cả khi không có kết quả. Về cơ bản những gì bạn đang kiểm tra $a = new stdClass; if ($a) { ... }
sẽ luôn luôn trả lại đúng sự thật.
Để xác định xem có bất kỳ kết quả nào không, bạn có thể thực hiện bất kỳ thao tác nào sau đây:
if ($result->first()) { }
if (!$result->isEmpty()) { }
if ($result->count()) { }
if (count($result)) { }
Bạn cũng có thể sử dụng ->first()
thay vì ->get()
trên trình xây dựng truy vấn sẽ trả về một thể hiện của mô hình được tìm thấy đầu tiên, hoặc null
nếu không. Điều này hữu ích nếu bạn cần hoặc chỉ mong đợi một kết quả từ cơ sở dữ liệu.
$result = Model::where(...)->first();
if ($result) { ... }
Ghi chú / Tài liệu tham khảo
Thông tin thưởng
Sự khác biệt của Bộ sưu tập và Trình tạo truy vấn có thể hơi khó hiểu với những người mới sử dụng Laravel vì tên phương thức thường giống nhau giữa hai tên. Vì lý do đó, có thể khó hiểu khi biết bạn đang làm việc trên cái gì. Trình tạo truy vấn về cơ bản xây dựng một truy vấn cho đến khi bạn gọi một phương thức trong đó nó sẽ thực thi truy vấn và truy cập cơ sở dữ liệu (ví dụ: khi bạn gọi một số phương thức nhất định như ->all()
->first()
->lists()
và các phương thức khác). Các phương thức đó cũng tồn tại trên Collection
đối tượng, có thể được trả về từ Trình tạo truy vấn nếu có nhiều kết quả. Nếu bạn không chắc chắn mình đang thực sự làm việc với lớp nào, hãy thử thực hiện var_dump(User::all())
và thử nghiệm để xem lớp nào thực sự trở lại (với sự trợ giúp củaget_class(...)
). Tôi thực sự khuyên bạn nên kiểm tra mã nguồn cho lớp Collection, nó khá đơn giản. Sau đó kiểm tra Trình tạo truy vấn và xem sự tương đồng trong tên hàm và tìm hiểu khi nào nó thực sự chạm vào cơ sở dữ liệu.
first()
, kết quả khác vớiget()
, có thể được kiểm tra với!$result
kết quả trống lànull