Laravel - ежедневный, еженедельный, ежемесячный и годовой отчет о доходах - PullRequest
0 голосов
/ 30 июня 2019

Как запустить запрос Laravel Eloquent для получения ежедневных, еженедельных, ежемесячных отчетов и отчетов о доходах.

Таблица: доход

id |канал |количество |create_at

1 |болтовня |3400 |9/10/12

2 |золото |3400 |8/10/12

3 |болтовня |4500 |07/10/12

4 |серебро |3200 |22/09/12

5 |серебро |3400 |9/10/12

6 |серебро |790 |22/09/12

7 |золото |1000 |9/08/12

8 |болтовня |9000 |22/09/12

Ожидаемый результат : ниже приведен примерный результат, не точный

Дата |канал |еженедельный доход |ежемесячный доход |годовой доход |Общий доход

2/2/2017 |золото |200 |5400 |3244 |90222

Дата |серебро |600 |4300 |983 |10000

Я хочу суммировать сумму (доход), как объяснено выше, возможно, сгруппировать по каналам и create_at (дата).Как мне написать красноречивый запрос и отфильтровать по дате между использованием create_at.Это должно быть сделано в контроллере.

1 Ответ

0 голосов
/ 30 июня 2019

Если у вас ограниченный канал (например, 5-20), используйте следующий код:

<?php
$items = Revenue::groupBy('channel')->get(['channel']);
$re = [];
foreach ($items as $key => $value) {
    $re['daily'][$value] = Revenue::where('channel',$value)->whereDate('created_at',date('Y-m-d'))->sum('amount');
    $re['weekly'][$value] = Revenue::where('channel',$value)->whereBetween('date', [
        Carbon::parse('last monday')->startOfDay(),
        Carbon::parse('next friday')->endOfDay(),
    ])->sum('amount');
    $re['monthly'][$value] = Revenue::where('channel',$value)->whereMonth('created_at',date('m'))->sum('amount');
    $re['yearly'][$value] = Revenue::where('channel',$value)->whereYear('created_at',date('Y'))->sum('amount');
}

var_dump($re);

В этом коде мы сначала разделяем каналы, а затем используем их для вычисления требуемого результата. Кстати, код для тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...