2016-08-09 9 views
0

カラムのRole、Position、Departmentには、これらのdbテーブル "role"、 "position"、 "department"のIDが表示されます。 GridViewgridviewとdetailview yii2でidの代わりに他のパラメータを取り出す方法は?

idsの代わりに名前を貼り付けるにはどうすればよいですか?

ありがとうございます。

+0

あなたはリレーショナルテーブルのデータまたは異なるテーブルのデータが必要ですか? –

+0

yeap、relational。 "role"テーブルのidは "user"テーブルのrole_idと同じです –

+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-> nameに変更しました。「不明なプロパティを取得しています:バックエンド\ models \ User :: role」と表示されます。 –

+0

まず、ユーザーモデルで利用可能なリレーションをチェックします。 –

+0

ありがとうございました!それは必要に応じて動作します。 –

1

属性の値を変更するには、匿名関数を使用します。代わりに、GridViewの列のリストに

role_id, 

シンプルで今、これはあなたにまったく同じ結果が得られます配列

[ 
    '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列の詳細については、こちらを参照してください。あなたはこのように行う

+0

スイッチでハードコードなしでこのロジックを実装することは可能ですか? idの代わりにroleの名前を自動的に貼り付けることを意味します。役割を限定したくないのは、私もこれらのやりとりや部署のために細心の注意を払っているからです。 –

+0

私はすでに、ハードコードされた静的メソッドとリレーショナルテーブルの3つのオプションを与えました。あなたはこれらに限定されません。 – Bizley

関連する問題