2016-08-09 3 views
0

В столбцах Роль, Позиция, Отдел вы видите идентификаторы этих таблиц «роль», «позиция», «отдел». GridViewКак получить другой параметр вместо id в gridview и detailview yii2?

Как вставить имена вместо идентификаторов?

Заранее спасибо.

+0

Вам нужны данные реляционной таблицы или разные данные таблицы? –

+0

yeap, relational. Идентификатор в таблице «role» равен role_id в таблице «user» –

+0

Вы проверили мой ответ? –

ответ

0

Для Детального вида проверки соотношения в модели и используя соотношение вы, как это: -

'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']); 
} 
+0

Я изменил $ data-> relation_table-> field_name на имя $ data-> role->, и он говорит: «Получение неизвестного свойства: backend \ models \ User :: role». –

+0

Сначала вы проверяете имеющееся отношение или нет в своей модели пользователя. –

+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 В настоящее время отображается экземпляр пользователя.

Подробнее о столбцах GridView в Guide.

+0

Возможно ли реализовать эту логику без жесткого кода с коммутатором? Я имею в виду автоматически вставить имя роли вместо идентификатора. Я не хочу ограничивать роли, потому что у меня есть crud для них, также для позиций и отделов. –

+0

Я уже дал вам 3 варианта: жесткий код, статический метод и реляционная таблица. Вы не ограничены этим. – Bizley

Смежные вопросы