2016-08-09 5 views
0

역할, 위치, 부서 열에서 이러한 db 테이블 "역할", "위치", "부서"의 ID를 볼 수 있습니다. GridViewgridview 및 detailview yii2에서 id 대신 다른 매개 변수를 검색하는 방법은 무엇입니까?

ID 대신 이름을 붙여 넣을 수 있습니까?

미리 감사드립니다.

+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으로 변경했으며 "알 수없는 속성 가져 오기 : backend \ 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'; 
     } 
    }, 
], 

어쩌면 당신은 가지고 이미 생성 방법 : 예를 들어

[ 
    'attribute' => 'role_id', 
    'value'  => function ($model, $key, $index, $column) { 
     return User::listRoles()[$model->role_id]; 
    }, 
], 
:

public static function listRoles() 
{ 
    return [ 
     1 => 'User', 
     2 => 'Moderator', 
     3 => 'Admin', 
    ]; 
} 

그래서 당신은 같은의 GridView에서 사용할 수 있습니다

관계형 데이터의 경우 다음과 같이 사용할 수 있습니다.

[ 
    'attribute' => 'role_id', 
    'value'  => function ($model, $key, $index, $column) { 
     return $model->role->name; 
    }, 
], 

$model은 현재 사용자의 인스턴스로 표시됩니다.

Guide의 GridView 열에 대해 자세히 알아보십시오. 당신은 다음과 같이 할

+0

스위치로 하드 코드없이이 논리를 구현할 수 있습니까? id 대신 역할의 이름을 자동으로 붙여 넣는다는 뜻입니다. 역할을 제한하고 싶지 않습니다. 왜냐하면 이것들은 물론 직위와 부서에도 무리가 있기 때문입니다. –

+0

이미 하드 코딩 된 정적 메서드와 관계형 테이블의 세 가지 옵션을 제공했습니다. 당신은 이것들에 국한되지 않습니다. – Bizley