我有两个数据库表'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模型的其他属性.
在 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)