Setiap kali Anda memanggil metode statis pada kelas model Anda, ia mengembalikan kueri Lancar seperti DB::table('yourmodeltable')->method
. Jika Anda mengingatnya, Anda akan segera menyadari bahwa mungkin untuk melakukan kueri apa pun dengan model Eloquent.
Sekarang, untuk mencapai kinerja yang lebih baik, Anda dapat menggunakan SQL TANGGAL() fungsi. Contoh saya di bawah ini belum teruji, jadi silakan perbaiki.
// tomorrow -1 week returns tomorrow's 00:00:00 minus 7 days
// you may want to come up with your own date tho
$date = new DateTime('tomorrow -1 week');
// DATE(objecttime) turns it into a 'YYYY-MM-DD' string
// records are then grouped by that string
$days = Object::where('objecttime', '>', $date)
->group_by('date')
->order_by('date', 'DESC') // or ASC
->get(array(
DB::raw('DATE(`objecttime`) AS `date`'),
DB::raw('COUNT(*) as `count`')
));
foreach ($days as $day) {
print($day->date . ' - '. $day->count);
}
Ini akan mencetak sesuatu seperti:
2013-03-09 - 13
2013-03-10 - 30
2013-03-11 - 93
2013-03-12 - 69
2013-03-13 - 131
2013-03-14 - 185
2013-03-15 - 69
Sunting:
Pendekatan yang disarankan di atas mengembalikan contoh Eloquent Model, yang mungkin tampak aneh, khususnya jika Anda var_dump($days)
. Anda juga dapat menggunakan list()
Flu Lancar metode untuk mencapai hal yang sama.
$date = new DateTime('tomorrow -1 week');
// lists() does not accept raw queries,
// so you have to specify the SELECT clause
$days = Object::select(array(
DB::raw('DATE(`objecttime`) as `date`'),
DB::raw('COUNT(*) as `count`')
))
->where('created_at', '>', $date)
->group_by('date')
->order_by('date', 'DESC') // or ASC
->lists('count', 'date');
// Notice lists returns an associative array with its second and
// optional param as the key, and the first param as the value
foreach ($days as $date => $count) {
print($date . ' - ' . $count);
}