@Silverviql

Как сделать фильтр в GridView для отображение полученной выручки за дату?

У меня на данный момент выводит таблицу с суммой всех отображенных элементов на странице. То есть если я вывожу 'pageSize' => 20, То получу сумму выручки из 20 отображенных элементов. Как выводить сумму за одну дату ? Я еще плохо разбираюсь в yii2 , если кто то предложит пример буду благодарен.

view.

<?php

/* @var $this yii\web\View */

use yii\helpers\Html;
use yii\grid\GridView;
use yii\data\ActiveDataProvider;
use frontend\models\NumberColumn;


$dataProvider = new ActiveDataProvider([
    'query' => \app\models\Zakaz::find(),
    'pagination' => [
        'pageSize' => 20,
    ],
]);

$this->title = 'Аналитика';
$this->params['breadcrumbs'][] = $this->title;

print_r ($arrayInView);

?>
<div class="site-about">
    <h1><?= Html::encode($this->title) ?></h1>
<?php echo GridView::widget([
    'dataProvider' => $dataProvider,
    'showFooter' => true,
    'columns' => [
        'id_zakaz',
         [
        'attribute' => 'data',
        'format' =>  ['date', ' dd.MM.YYYY'],
        'options' => ['width' => '200']
         ],
        [
            'class' => NumberColumn::className(),
            'attribute' => 'fact_oplata',
        ],
    ],
]);?>


</div>

NumberColumn - для получение суммы

<?php

namespace frontend\models;

use yii\grid\DataColumn;

class NumberColumn extends DataColumn
{
    private $_total = 0;

    public function getDataCellValue($model, $key, $index)
    {
        $value = parent::getDataCellValue($model, $key, $index);
        $this->_total += $value;
return $value;
}

protected function renderFooterCellContent()
{
    return $this->grid->formatter->format($this->_total, $this->format);;
}
}

Вот что у меня получается.
5add9acfe23c4328031469.png

Вот что я хотел бы получить для каждой даты
5add9ae418e51807148184.png
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Думаю стоит сделать свой dataProvider, унаследовать от стандартного activeDataProvider и реализовать в нем методы, которые будут забирать сумму отдельным запросом. Что-то типа:
public $sumQuery = MyModel::find();

public function getSum($col){
return $this->sumQuery->sum($col);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы