Bất cứ khi nào bạn gọi một phương thức tĩnh trên lớp mô hình của mình, nó sẽ trả về một truy vấn Thông thạo như DB::table('yourmodeltable')->method
. Nếu bạn ghi nhớ điều đó, bạn sẽ sớm nhận ra rằng có thể thực hiện bất kỳ truy vấn nào với các mô hình Eloquent.
Bây giờ, để đạt được hiệu suất cao hơn, bạn có thể sử dụng SQLs DATE () hàm số. Ví dụ dưới đây của tôi chưa được kiểm tra, vì vậy vui lòng sửa lại.
// 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);
}
Điều này sẽ in ra một cái gì đó như:
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
Chỉnh sửa:
Phương pháp được đề xuất ở trên trả về các bản sao của Eloquent Model, có vẻ lạ, đặc biệt nếu bạn var_dump($days)
. Bạn cũng có thể sử dụng list()
của Fluent phương pháp để đạt được điều tương tự.
$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);
}