Ещё один вопрос по gridView

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Странник
Сообщения: 296
Зарегистрирован: 2013.04.08, 10:35
Откуда: Нижний Новгород

Ещё один вопрос по gridView

Сообщение Странник »

Через форму задаются несколько параметров.
Результат должен выводиться через GridView
Но одну из переменных не понимаю как передать.
Код:
В моделе сделал геттер:

Код: Выделить всё

// Model
    public function getRetail()
    {
        return ($this->id_client !=0)? Orders::find()->select('SUM(amount) as amount')->where(['id_route'=>$this->id, 'id_client'=>$this->id_client])->one()->amount:
        Orders::find()->select('SUM(amount) as amount')->where(['id_route'=>$this->id])->one()->amount;
    }
Контроллер простой:

Код: Выделить всё

	$model = new Number();
	$model->date_to = date('Y-m-d');
	$model->date_from = date('Y-m-d', strtotime("-3 month"));
	$model->id_partner = 0;
	if(Yii::$app->request->post()) $model->load(Yii::$app->request->post());
	$dataProvider = new ActiveDataProvider([
		'query' => Number::find()
			->where(['ready'=>1])
			->andWhere(['>=', 'route.date', $model->date_from])
			->andWhere(['<=', 'route.date', $model->date_to])
			->orderBy('route.date DESC'),
	]);
	return $this->render('view', [
		'model' => $model,
		'dataProvider' => $dataProvider,
	]);
В представлении форма и грид:

Код: Выделить всё

    <?php $form = ActiveForm::begin(); ?>
    <div class="form-group">
    <?= DatePicker::widget([
		'model' => $model,
		'attribute' => 'date_from',
		'attribute2' => 'date_to',
		'type' => DatePicker::TYPE_RANGE,
		'separator' => '-',
		'pluginOptions' => ['format' => 'yyyy-mm-dd', 'autoclose'=>true]
	]); ?>
    <?= $form->field($model, 'id_client')->dropDownList(ArrayHelper::map(Client::find()->orderBy(['title' => SORT_ASC])->all(),'id','title')); ?>
    </div>
    <div class="form-group">
        <?= Html::submitButton('Выбрать') ?>
    </div>
    <?php ActiveForm::end(); ?>	


<div class="number-index">
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'layout' => "{items}\n{pager}",
        'columns' => [
			'number',
			'date',
            [
                'attribute' => 'retail',
                'filter' => false,
                'value' => function ($data) {
                    return ($data->retail)? $data->retail: 0;
                }
            ],
        ],
    ]); ?>
</div>	
Задача выводить или общую сумму или сумму по конкретному клиенту.
Не понимааю как передать в провайдер id_client
Ответить