Фильтрация GridView YiI2

190
15 октября 2018, 22:50

Нужна подсказка. Осваиваю Yii2 и тут возникла проблема. Есть таблица USER и GridView c данными из этой таблицы - фильтрация работает. И есть таблица SEND и GridView c данными из этой таблицы - тут он никак не выполняет фильтрацию. Код брался из класса User и SearchUser.

КОНТРОЛЛЕР

public function actionAllsend(){
    if(isAdmin()){
        $searchModel = new SendSearch();
        //Получим записи по конкретному пользователю
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        return $this->render('allsend', [
          'searchModel' => $searchModel,
          'dataProvider' => $dataProvider,
        ]);
    }
    else{
      return $this->redirect(['site/index']);
    }
}

МОДЕЛЬ

public function search($params, $userName = null)
    {
        $this->load($params);
       // Получим все записи либо записи по конкретному пользователю
        if($userName == null){
            $query = Send::find();
             // grid filtering conditions
            $query->andFilterWhere([
                'id' => $this->id,
        ]);
        $query->andFilterWhere(['like', 'user_id', $this->user_id])
              ->andFilterWhere(['like', 'type', $this->type])
              ->andFilterWhere(['like', 'date', $this->date])
              ->andFilterWhere(['like', 'status', $this->status]);
        }
        else{
            $query = Send::find();
            $query->andFilterWhere([
                'user_id' => $userName,
            ]);
        }
//                    echo $query;

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                 'forcePageParam' => false,
                 'pageSizeParam' => false,
                'pageSize' => 20
            ]
        ]);

        if (!$this->validate()) {
            // uncomment the following line if you do not want to return any records when validation fails
            // $query->where('0=1');
            return $dataProvider;
        }
        return $dataProvider;
    }

ВЬЮХА

<div class="admin-all-send">
    <h1><?= Html::encode($this->title) ?></h1>
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            //['class' => 'yii\grid\SerialColumn'],
            ['attribute'=>'id', "label"=>'Уникальный номер рассылки'],
            ['attribute'=>'date', "label"=>'Дата транзакции'],
            ['attribute'=>'user_id', 'label'=>'Чья рассылка'],
            ['attribute'=>'type', 'label'=>'Тип  рассылки'],
            ['attribute'=>'status', "label" => "Статус рассылки"],
            ['attribute'=>'price', 'label'=>'Цена рассылки'],
           ['class' => 'yii\grid\ActionColumn',
             'template' => '{view}  {delete}',   
            ],
        ],
    ]); ?>
</div>
Answer 1

Нашел проблему. Косяк в модели был. Так работате:

public function search($params, $userName = null)
    {
        $this->load($params);
       // Получим все записи либо записи по конкретному пользователю
        if($userName == null){
            $query = Send::find();
             // grid filtering conditions
            $query->andFilterWhere([
                'id' => $this->id,
             ]);
        }
        else{
            $query = Send::find();
            $query->andFilterWhere([
                'user_id' => $userName,
            ]);
        }
         $query->andFilterWhere(['like', 'user_id', $this->user_id])
              ->andFilterWhere(['like', 'type', $this->type])
              ->andFilterWhere(['like', 'date', $this->date])
              ->andFilterWhere(['like', 'status', $this->status]);
//                    echo $query;

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                 'forcePageParam' => false,
                 'pageSizeParam' => false,
                'pageSize' => 20
            ]
        ]);

        if (!$this->validate()) {
            // uncomment the following line if you do not want to return any records when validation fails
            // $query->where('0=1');
            return $dataProvider;
        }
        return $dataProvider;
    }
READ ALSO
Как в форму обратной связи добавить вложение файла?

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

Не пойму как отправлять вложенные файлы в формеКод

175
Многомерный массив JSON и PHP

Многомерный массив JSON и PHP

У меня есть массивы:

278
Разбивка строки по длинее и переносу строки

Разбивка строки по длинее и переносу строки

Есть такая функция, которая разбивает строку на части заданной длинны:

149