代码之家  ›  专栏  ›  技术社区  ›  godot

yii2中的网格视图过滤模型

  •  0
  • godot  · 技术社区  · 6 年前

    我有一个带有数据提供程序的GridView,它将两个表作为查询联接:

     $applicationDataProvider = new ActiveDataProvider([
                    'query' => Application::find()->with('applicantInfo')
                        ->where(['job_posting_id' => $jobPosting->id,
                            'deleted_flag' => 0])->orderBy('created_at desc'),
                    'pagination' => [
                        'pageSize' => 5
                    ]
                ]);
    

    这是我的 GridView :

    <?= GridView::widget([
                    'dataProvider' => $applicationDataProvider,
                    'filterModel'=>$searchModel,
                    'columns' => [
                        'id',
                        [
                            'class' => yii\grid\DataColumn::className(),
                            'headerOptions' => ['style' => 'color:#337ab7'],
                            'header' => 'სახელი',
                            'label'=>'name',
                            'value' => function ($data) {
                                return $data->applicantInfo->first_name . ' ' . $data->applicantInfo->last_name;
                            }
                        ],
    
    
                        'applicantInfo.email',
                        'applicantInfo.phone',
                        'created_at:date',
                        [
                            'class' => 'yii\grid\ActionColumn',
                            'headerOptions' => ['style' => 'color:#337ab7'],
                            'template' => '{view}',
                            'buttons' => [
                                'view' => function ($url, $model) {
                                    return Html::a('<span class="glyphicon glyphicon-eye-open"></span>', $url, [
                                        'title' => Yii::t('app', 'გახსნა'),
                                    ]);
                                }
    
    
                            ],
                            'urlCreator' => function ($action, $model, $key, $index) {
                                if ($action === 'view') {
                                    $url = '/app-info/?id=' . $model->id;
                                    return $url;
                                }
    
                            }
    
     ...
    

    在一个 搜索模型 我有 电子邮件 字段,因为我只想在GridView中搜索电子邮件。

    class ApplicationSearch extends Application
    {
    
    
        public function rules()
        {
            return [
    
                [['email'], 'safe'],
                ];
        }
    

    但这里没有电子邮件的搜索字段,我如何修复它?

    1 回复  |  直到 6 年前
        1
  •  4
  •   rob006    6 年前

    您需要添加 email 属性 ApplicationSearch 要从筛选器存储值:

    class ApplicationSearch extends Application {
    
        public $email;
    
        public function rules() {
            return [
                [['email'], 'safe'],
            ];
        }
    }
    

    使用此属性进行筛选:

    $applicationDataProvider = new ActiveDataProvider([
        'query' => Application::find()->with('applicantInfo')
            ->where(['job_posting_id' => $jobPosting->id, 'deleted_flag' => 0])
            ->andFilterWhere(['like', 'applicantInfo.email', $this->email])
            ->orderBy('created_at desc'),
        'pagination' => [
            'pageSize' => 5
        ]
    ]);
    

    并使用网格中关系的值:

    // ...
    [
        'attribute' => 'email',
        'value' => function ($data) {
            return $data->applicantInfo->email;
        },
    ],
    'applicantInfo.phone',
    // ...