Laravel 4+ menawarkan metode ini kepada Anda:whereDay()
, whereMonth()
, whereYear()
(#3946
) dan whereDate()
(#6879
).
Mereka melakukan SQL DATE()
bekerja untuk Anda, dan mengelola perbedaan SQLite.
Hasil Anda dapat dicapai dengan cara:
->whereDate('date', '<=', '2014-07-10')
Untuk contoh lainnya, lihat pesan pertama #3946 dan artikel Harian Laravel ini .
Pembaruan: Meskipun metode di atas nyaman, seperti yang dicatat oleh Arth, metode ini tidak efisien pada kumpulan data besar, karena DATE()
Fungsi SQL harus diterapkan pada setiap record, sehingga membuang kemungkinan indeks.
Berikut adalah beberapa cara untuk membuat perbandingan (tetapi harap baca catatan di bawah):
->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)
Catatan:
- 23:59:59 tidak apa-apa (untuk saat ini) karena presisi 1 detik, tetapi lihat artikel ini:23:59:59 bukan akhir hari. Tidak, sungguh!
- Perhatikan kasus "tanggal nol" ("0000-00-00 00:00:00"). Padahal, "tanggal nol" ini harus dihindari, mereka adalah sumber dari begitu banyak masalah. Lebih baik buat bidang tersebut batal jika diperlukan.