2013-05-26 3 views
1

Таким образом, получение суммы()/count() очень просто в Laravel ... , но как бы я посмотрел на прошлый месяц и получал сумму строк каждый день ?Получение ежедневных агрегатов/сумм, отсортированных по дням в Laravel

EG ... сгруппировано по дням, что они были созданы на.

Так что я хочу, чтобы вернуть количество таких как 3, 2, 4, 5 Значение 3 строки были созданы на дату сегодняшнего, 2 строк вчера, 4 строки за день до ... и т.д.

Как сделать это в Ларавеле легко? Когда я использую группу by created_at, он всегда просто возвращает 1.

Кто-нибудь знает, как это сделать?

Благодаря

+0

Я скажу, что я понял это, используя необработанные запросы в Laravel, но было просто интересно, если там был свободно/красноречивый способ выполнения таких запросов – KyleK

+0

я при условии, что точно такой же ответьте на другой пост: http://stackoverflow.com/questions/15437854/laravel-multiple-count-queries-using-eloquent/15438413#15438413 – vFragosop

ответ

7

я обеспечил тот же ответ on another post. Укорочение его:

$date = new DateTime('tomorrow -1 month'); 

// lists() does not accept raw queries, 
// so you have to specify the SELECT clause 
$days = Object::select(array(
     DB::raw('DATE(`created_at`) as `date`'), 
     DB::raw('COUNT(*) as `count`') 
    )) 
    ->where('created_at', '>', $date) 
    ->group_by('date') 
    ->order_by('date', 'DESC') 
    ->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); 
} 
+0

Спасибо, я все равно решил ... но это более элегантно, чем что я сделал – KyleK

+0

Спасибо. Мне пришлось использовать 'groupBy' и 'orderBy' вместо' group_by' 'order_by'. Ваш ответ был полезен. – Neel

+0

Работает как Magic –