2016-08-09 10 views
0

In Spalten Rolle, Position, Abteilung sehen Sie IDs dieser db Tabellen "Rolle", "Position", "Abteilung". GridViewWie kann man einen anderen Parameter anstelle von id in Gridview und Detailview yii2 abrufen?

Wie kann ich Namen anstelle von IDs einfügen?

Vielen Dank im Voraus.

+0

Benötigen Sie relationale Tabellendaten oder unterschiedliche Tabellendaten? –

+0

yeap, relational. ID in der "Rolle" -Tabelle entspricht der Rolle_ID in "Benutzer" Tabelle –

+0

Haben Sie meine Antwort überprüft? –

Antwort

0

Für Detailansicht Prüfung die Beziehung in Modell und unter Verwendung der Beziehung tun Sie wie folgt aus: -

'attributes' => [ 
    'title',    
    'relational_data', 
    [      
     'label' => 'Field Name', 
     'value' => $data->relation_table->field_name, 
    ],   
], 

Für Tabellenansicht: -

[ 
    'attribute' => 'role_id', 
    'value'  => function ($data) { 
     return $data->relation_table->field_name; 
    }, 
], 

Und Ihre Tabellenbeziehungs sollte wie folgt aussehen: -

public function getRelation_table() 
{ 
    return $this->hasOne(Table::className(), ['relation_id' => 'id']); 
} 
+0

Ich habe $ data-> relation_table-> field_name zu $ ​​data-> role-> name geändert und es heißt: "Getting unknown property: backend \ models \ User :: role". –

+0

Zuerst prüfen Sie die verfügbare Beziehung in Ihrem Benutzermodell. –

+0

Vielen Dank! Es funktioniert wie nötig. –

1

Verwenden Sie anonyme Funktion, um den Wert des Attributs zu ändern. Statt einfacher

role_id, 

auf der Liste der Gridview-Spalten verwenden Array

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

: Nun wird Ihnen genau das gleiche Ergebnis erhalten, aber Sie können es besonders anfertigen. Zum Beispiel:

[ 
    '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'; 
     } 
    }, 
], 

Vielleicht hast dich bereits erstellen Methode mit allen in Ihrer Benutzerklasse mit dem Namen Rolle:

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

so können Sie es im Gridview wie verwenden:

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

Im Fall von relationalen Daten können Sie es auch verwenden:

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

$model wird derzeit Instanz des Benutzers angezeigt.

Lesen Sie mehr über GridView-Spalten in der Guide.

+0

Ist es möglich, diese Logik ohne Hardcode mit Schalter zu implementieren? Ich meine automatisch den Namen der Rolle anstelle der ID einfügen. Ich möchte die Rollen nicht einschränken, weil ich für diese auch für Positionen und Abteilungen crud –

+0

Ich gab Ihnen bereits 3 Optionen: Hardcoded, statische Methode und relationale Tabelle. Sie sind nicht auf diese beschränkt. – Bizley

Verwandte Themen