Laravel 4+ cung cấp cho bạn các phương thức sau:whereDay()
, whereMonth()
, whereYear()
( # 3946
) và whereDate()
( # 6879
).
Họ thực hiện SQL DATE()
làm việc cho bạn và quản lý sự khác biệt của SQLite.
Kết quả của bạn có thể đạt được như vậy:
->whereDate('date', '<=', '2014-07-10')
Để biết thêm ví dụ, hãy xem thông báo đầu tiên của # 3946 và bài viết hàng ngày của Laravel này .
Cập nhật: Mặc dù phương pháp trên rất tiện lợi, theo ghi nhận của Arth, nó không hiệu quả trên các tập dữ liệu lớn, vì DATE()
Hàm SQL phải được áp dụng trên mỗi bản ghi, do đó loại bỏ chỉ mục có thể có.
Dưới đây là một số cách để so sánh (nhưng vui lòng đọc ghi chú bên dưới):
->where('date', '<=', '2014-07-10 23:59:59')
->where('date', '<', '2014-07-11')
// '2014-07-11'
$dayAfter = (new DateTime('2014-07-10'))->modify('+1 day')->format('Y-m-d');
->where('date', '<', $dayAfter)
Ghi chú:
- 23:59:59 không sao (hiện tại) vì độ chính xác 1 giây, nhưng hãy xem bài viết này: 23:59:59 không phải là ngày kết thúc. Không, thực sự!
- Hãy ghi nhớ trường hợp "zero date" ("0000-00-00 00:00:00"). Mặc dù vậy, nên tránh những "ngày không" này, chúng là nguồn gốc của rất nhiều vấn đề. Tốt hơn nên đặt trường này ở trạng thái vô hiệu nếu cần.