Kdykoli ve své třídě modelu zavoláte statickou metodu, vrátí dotaz Fluent jako DB::table('yourmodeltable')->method
. Pokud to budete mít na paměti, brzy si uvědomíte, že pomocí modelů Eloquent je možné zadat jakýkoli dotaz.
Nyní, abyste dosáhli vyššího výkonu, můžete použít SQL DATUM() funkce. Můj příklad níže není testován, takže jej prosím opravte.
// 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);
}
Toto by mělo vytisknout něco jako:
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
Upravit:
Výše navrhovaný přístup vrací instance Eloquent Model, což se může zdát divné, zvláště pokud var_dump($days)
. Můžete také použít list()
společnosti Fluent způsob, jak dosáhnout stejné věci.
$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);
}