答案 0 :(得分:1)
使用匿名函数更改属性的值。而不是简单的
role_id,
GridView列列表中的使用数组
[
'attribute' => 'role_id',
'value' => function ($model, $key, $index, $column) {
return $model->role_id;
},
],
现在,这将获得完全相同的结果,但您可以自定义它。例如:
[
'attribute' => 'role_id',
'value' => function ($model, $key, $index, $column) {
switch ($model->role_id) {
case 1:
return 'User';
case 2:
return 'Moderator';
case 3:
return 'Admin';
}
},
],
也许您已经使用User类中指定的所有角色创建了方法:
public static function listRoles()
{
return [
1 => 'User',
2 => 'Moderator',
3 => 'Admin',
];
}
所以你可以在GridView中使用它,如:
[
'attribute' => 'role_id',
'value' => function ($model, $key, $index, $column) {
return User::listRoles()[$model->role_id];
},
],
如果是关系数据,您也可以使用它:
[
'attribute' => 'role_id',
'value' => function ($model, $key, $index, $column) {
return $model->role->name;
},
],
$model
当前显示为User的实例。
在Guide中了解有关GridView列的更多信息。
答案 1 :(得分:1)
对于详细信息视图,请检查模型中的关系并使用您喜欢的关系: -
'attributes' => [
'title',
'relational_data',
[
'label' => 'Field Name',
'value' => $data->relation_table->field_name,
],
],
对于网格视图: -
[
'attribute' => 'role_id',
'value' => function ($data) {
return $data->relation_table->field_name;
},
],
您的表关系应该是这样的: -
public function getRelation_table()
{
return $this->hasOne(Table::className(), ['relation_id' => 'id']);
}
答案 2 :(得分:0)
在有关系数据的情况下,我会在@Bizley解决方案中添加一个内容:
[
'attribute' => 'role_id',
'value' => function ($model, $key, $index, $column) {
return $model->role->name;
},
],
不要忘记进行急切的加载,您应该将 UsersSearch 添加到 search 函数
$query = Users::find()->with('role');// eager loading
代替
$query = Users::find();// lazy loading
,并使用角色名称进行过滤
[
'attribute' => 'role_id',
'value' => function ($model, $key, $index, $column) {
return $model->role->name;
},
'filter'=>ArrayHelper::map(\app\models\Role::find()
->asArray()- >all(), 'id', 'name')
],
这将在填充所有角色名称的过滤条件中添加一个组合框,如果您想要输入文本过滤选项,则还有另一种方法:
删除上面添加的过滤器选项:
[
'attribute' => 'role_id',
'value' => function ($model, $key, $index, $column) {
return $model->role->name;
},
],
使用joinWith代替
$query = Users::find()->joinWith('role');
'role' => $this->role,
并放入->andFilterWhere(['like', 'roles.name', $this->role])