首页 > 解决方案 > Yii2在gridview中的多模型搜索

问题描述

我有 2 个模型“用户”和“用户配置文件”,我在列表页面上显示了数据。我想对模型“UserProfile”的字段“name_company”进行过滤,但我没有经验。帮帮我,谢谢大家。我的索引:

<?php
    $gridColumns = [
        ['class' => 'kartik\grid\CheckboxColumn'],
        [
            'attribute' => 'username',
            'value' => function($model){
                return Helper::checkRoute('update') ? Html::a($model->username, ['update', 'id' => $model->id]) : $model->username;
            },
            'format'=>'raw',
            'contentOptions' => [ 'style' => 'width: 10%;' ],
        ],
       ...
        [
            'label' => 'Name_company',
            'value' => function($model){
                $query = $model->userProfile->name_company;
                return $query;
            },
            'contentOptions' => [ 'style' => 'width: 15%;' ],
        ],
        ...
        ],
    ];

    echo GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'options' => [ 'style' => 'table-layout:fixed;' ],
        'columns' => $gridColumns,
    ]);
    ?>

我的索引

我的控制器:

public function actionIndex()
    {
        $searchModel = new UserSearch();
        $dataProvider = $searchModel->searchContractorUser(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

我的模型搜索,我有模型搜索“用户”:

public function searchContractorUser($params)
    {
        $query = User::find()->join('LEFT JOIN','rbac_auth_assignment','rbac_auth_assignment.user_id = id')
        ->where(['rbac_auth_assignment.item_name' => 'user-contractor']);

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);
        if (!($this->load($params) && $this->validate())) {
            return $dataProvider;
        }

        $query->andFilterWhere([
            'id' => $this->id,
            'status' => $this->status,
        ]);

        $query->andFilterWhere(['like', 'username', $this->username])
            ->andFilterWhere(['like', 'auth_key', $this->auth_key])
            ->andFilterWhere(['like', 'password_hash', $this->password_hash])
            ->andFilterWhere(['like', 'email', $this->email]);

        return $dataProvider;
    }

标签: phpyii2

解决方案


推荐阅读