В столбцах Роль, Позиция, Отдел вы видите идентификаторы этих таблиц «роль», «позиция», «отдел». Как получить другой параметр вместо id в gridview и detailview yii2?
Как вставить имена вместо идентификаторов?
Заранее спасибо.
В столбцах Роль, Позиция, Отдел вы видите идентификаторы этих таблиц «роль», «позиция», «отдел». Как получить другой параметр вместо id в gridview и detailview yii2?
Как вставить имена вместо идентификаторов?
Заранее спасибо.
Для Детального вида проверки соотношения в модели и используя соотношение вы, как это: -
'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']);
}
Я изменил $ data-> relation_table-> field_name на имя $ data-> role->, и он говорит: «Получение неизвестного свойства: backend \ models \ User :: role». –
Сначала вы проверяете имеющееся отношение или нет в своей модели пользователя. –
Спасибо вам большое! Он работает по мере необходимости. –
Используйте анонимную функцию для изменения значения атрибута. Вместо того, чтобы просто
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
В настоящее время отображается экземпляр пользователя.
Подробнее о столбцах GridView в Guide.
Возможно ли реализовать эту логику без жесткого кода с коммутатором? Я имею в виду автоматически вставить имя роли вместо идентификатора. Я не хочу ограничивать роли, потому что у меня есть crud для них, также для позиций и отделов. –
Я уже дал вам 3 варианта: жесткий код, статический метод и реляционная таблица. Вы не ограничены этим. – Bizley
Вам нужны данные реляционной таблицы или разные данные таблицы? –
yeap, relational. Идентификатор в таблице «role» равен role_id в таблице «user» –
Вы проверили мой ответ? –