Yii Framework 2.0 GridView和来自连接表的数据

O C*_*nor 6 php gridview yii2

我有两个数据库表'user'和'role'.我使用Yii framework 2.0 Gii用User模型和UserSearch模型创建CRUD.默认情况下,Gii使用GridView :: widget作为"用户"模型的索引页面.

在UserSearch模型内部的搜索($ params)方法中,我使用以下代码将上述表连接在一起

$query = User::find()->with('role');
Run Code Online (Sandbox Code Playgroud)

查询一切正常.

默认情况下,Gii不包含来自views/user/index.php页面内GridView :: widget中的连接表'role'的数据.通过上面的连接查询,我可以从两个表中检索数据.在views/user/index.php页面中,我使用以下代码注入了GridView :: widget,以便它还包括连接表(角色)中的数据和列名.

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        'userid',
        'username',
        'role.role_name',
        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>
Run Code Online (Sandbox Code Playgroud)

使用GridView :: widget中包含的角色数据'role_name,一切正常.但问题是role_name没有搜索框.GridView :: widget仅为User属性创建搜索框.有没有办法为联接表'role'的属性添加搜索框,因为我还想搜索'role_name'以及User模型的其他属性.

raj*_*ade 1

  1. 在 CGridView 内添加以下代码。它将启用带有 dropDownList 的过滤器。

       [
            'attribute' => 'act_role_id',
            'label' => 'Actor Role',
            'value' => 'actRole.role_name',
            'filter' => yii\helpers\ArrayHelper::map(app\models\ActorRole::find()->orderBy('role_name')->asArray()->all(),'act_role_id','role_name')
        ],
    
    Run Code Online (Sandbox Code Playgroud)

CGridView代码片段如下:

   <?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],

        'userid',
        'username',
        [
            'attribute' => 'act_role_id',
            'label' => 'Actor Role',
            'value' => 'actRole.role_name',
            'filter' => yii\helpers\ArrayHelper::map(app\models\ActorRole::find()->orderBy('role_name')->asArray()->all(),'act_role_id','role_name')
        ],
        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回答,但您的代码适用于 Yii 1,而我使用的是 Yii 2.0。我尝试将您的 Yii 1 代码示例转换为 Yii 2 代码,但没有成功。你能告诉我如何在 Yii 2.0 中做到这一点吗? (2认同)