モデルクラスで静的メソッドを呼び出すと、DB::table('yourmodeltable')->method
のようなFluentクエリが返されます。 。このことを念頭に置いておくと、Eloquentモデルを使用して任意のクエリを実行できることがすぐにわかります。
現在、パフォーマンスを向上させるために、SQLを使用できます DATE() 関数。以下の私の例はテストされていないので、自由に修正してください。
// 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);
}
これは次のように出力されます:
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
編集:
上記の提案されたアプローチは、特にvar_dump($days)
の場合、奇妙に見えるかもしれないEloquentModelのインスタンスを返します。 。 Fluentのlist()
を使用することもできます 同じことを達成する方法。
$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);
}