2015-08-23 13 views
6

Sto usando Yii2 gridview widget per visualizzare i dati.Come unire due tabelle e ottenere valori in Yii2 gridview

sto utilizzando due tabelle denominate come messaggio e message_trigger.

Nel messaggio colonne della tabella sono object_model, Object_id.

In message_trigger colonna sono object_id, object_name.

La griglia ottiene i valori dalla tabella messaggio. Quindi i campi della griglia sono Object_model, Object_id.

Ora il mio problema è che ho bisogno di mostrare Object_name dalla tabella message_trigger in base alla object_id dalla tabella messaggio. griglia

Nella mia forma ho usato come questo

<?= GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'filterModel' => $searchModel, 
    'columns' => [ 
     ['class' => 'yii\grid\SerialColumn'], 
     'object_model', 
     'object_id', 
     ['class' => 'yii\grid\ActionColumn', 'template' => '{view} {update} {delete} '], 
    ], 
]); ?> 

Nel modello che ho utilizzato

public function search($params){ 
    $query = AlertTrigger::find()->where(['alert_id'=>$params['id']])->andWhere(['!=','status',2]); 
    $dataProvider = new ActiveDataProvider([ 
     'query' => $query, 
    ]); 
} 

risposta

8

In Message Modello

public function getMessageTrigger() 
{ 
    return $this->hasOne(MessageTrigger::className(), ['object_id' => 'object_id']); 
} 

in vista

<?= GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'filterModel' => $searchModel, 
    'columns' => [ 
     ['class' => 'yii\grid\SerialColumn'], 
     'object_model', 
     'object_id', 
     [ 
      'label' => 'Name', 
      'value' => 'messageTrigger.object_name', 
     ], 
     ['class' => 'yii\grid\ActionColumn', 'template' => '{view} {update} {delete} '], 
    ], 
]); ?> 
+0

Cosa devo fare se anche il ** nome_oggetto ** è ordinabile ?? – Choxx

3

ankitraturi answer è la migliore risposta. Se qualcuno vuole ottenere valore usando una funzione dal modello e usarlo nella griglia, significa seguire i passaggi seguenti.

  1. Aggiungere la funzione che restituisce il valore nel modello (Qui utilizzo il modello Message).
public static function get_message_trigger($id){ 
    $model = MessageTrigger::find()->where(["object_id" => $id])->one(); 
    if(!empty($model)){ 
     return $model->object_name; 
    } 

    return null; 
} 
  1. Nel GridView usare come qui di seguito.
<?= GridView::widget([ 
    'dataProvider' => $dataProvider, 
    'filterModel' => $searchModel, 
    'columns' => [ 
     ['class' => 'yii\grid\SerialColumn'], 
     'object_model', 
     'object_id', 
     [ 
      'label' => 'Name', 
      'value' => function($data){ 
       return Message::get_message_trigger($data->object_id) 
      }, 
     ], 
     ['class' => 'yii\grid\ActionColumn', 'template' => '{view} {update} {delete} '], 
    ], 
]); ?> 

Spero che questo vi aiuterà qualcuno.

+0

buono. mi ha aiutato – Pratik

+0

Grazie, ha funzionato ... – Ivan

Problemi correlati