Membuat Pencarian Berdasarkan Rentang Waktu di Laravel
Dalam tulisan kali ini saya mencoba untuk membuat fungi pencarian berdasarkan rentang waktu setahun, sebulan, seminggu, dan sehari terakhir. Sebelumnya saya sudah memiliki data seperi ini :
Title Created At Artikel 3 2016-09-26 13:53:04 Artikel 15 2016-09-29 13:53:04 Artikel 4 2016-09-30 13:53:04 Artikel 6 2016-09-30 13:53:04 Artikel 2 2016-10-05 13:53:04 Artikel 16 2016-10-07 13:53:04 Artikel 10 2016-10-11 13:53:04 Artikel 21 2016-10-16 13:53:04 Artikel 19 2016-10-17 13:53:04 Artikel 23 2016-10-18 13:53:04 Artikel 1 2016-10-19 13:53:04 Artikel 13 2016-10-23 13:53:04 Artikel 18 2016-10-25 13:53:04 Artikel 17 2016-10-30 13:53:04 Artikel 5 2016-10-31 13:53:04 Artikel 11 2016-11-03 13:53:04 Artikel 14 2016-11-05 13:53:04 Artikel 25 2016-11-05 13:53:04 Artikel 12 2016-11-09 13:53:04 Artikel 20 2016-11-10 13:53:04 Artikel 22 2016-11-13 13:53:04 Artikel 24 2016-11-16 13:53:04 Artikel 7 2016-11-17 13:53:04 Artikel 9 2016-11-18 13:53:04 Artikel 8 2016-11-19 13:53:04
Data di atas memiili data tertua merupakan data yang dibuat pada tanggal 26 September 2016 sedangkan data terbaru dibuat tanggal 19 November 2016.
Persiapan di Controller
Pertama-tama buat dulu fungsi dateRange()
yang fungsinya menentukan rentang waktu :
<?php private function dateRange($time) { switch ($time) { case "day": $time = [Carbon::now()->subHours(24)->toDateTimeString(), Carbon::now()->toDateTimeString()]; break; case "week": $time = [Carbon::now()->subDays(7)->toDateTimeString(), Carbon::now()->toDateTimeString()]; break; case "month": $time = [Carbon::now()->subDays(30)->toDateTimeString(), Carbon::now()->toDateTimeString()]; break; case "year": $time = [Carbon::now()->subDays(365)->toDateTimeString(), Carbon::now()->toDateTimeString()]; break; default: $time = null; } return $time; }
Karena ini membutuhkan Carbon
, pastikan carbon
sudah didaftarkan di controller
yang dipakai.
Membuat Fungsi Pencarian.
<?php # $range = $this->dateRange("day"); // gunakan ini jika mencari yang rentang perhari $range = $this->dateRange("week");// gunakan ini jika mencari yang rentang perminggu # $range = $this->dateRange("month");// gunakan ini jika mencari yang rentang perbulan # $range = $this->dateRange("year");// gunakan ini jika mencari yang rentang pertahun $all = Article::whereBetween('created_at', $range)->orderBy('created_at','asc')->get();
Sehingga jika memilih rentang perminggu ( week ) data yang akan dihasilkan seperti berikut.
Title Created At Artikel 7 2016-11-17 13:53:04 Artikel 9 2016-11-18 13:53:04 Artikel 8 2016-11-19 13:53:04