Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Laravel Eloquent membandingkan tanggal dari bidang datetime

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengecualian Keamanan menggunakan MySQL dan Entity Framework di godaddy

  2. Subquery MySQL mengembalikan lebih dari satu baris

  3. Panjang indeks varchar MySQL

  4. Bagaimana menulis multi kolom dalam klausa dengan sqlalchemy

  5. pekerjaan untuk menghapus baris yang lebih lama dari 3 bulan di database mysql