2015-08-23 79 views
6

我使用Yii2 gridview小部件來顯示數據。如何連接兩個表並獲取Yii2 gridview中的值

我使用兩個表名爲消息message_trigger

消息表列是object_model,Object_id

message_trigger該列是object_id,object_name

該網格從表消息獲得值。所以網格字段是Object_model,Object_id。現在

我的問題是我需要從基礎上object_id從表消息message_trigger顯示Object_name

在我的表單中我用網這樣

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

在模型中我已經使用

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

回答

8

Message型號

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

鑑於

<?= 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

如果我需要使** object_name **可排序呢? – Choxx

3

ankitraturi answer是最佳答案。如果有人想使用模型中的函數獲取值,並在gridview中使用它,請按照以下步驟進行操作。

  1. 添加返回模型中的值的函數(這裏我使用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; 
} 
  • 在GridView使用如下。
  • <?= 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} '], 
        ], 
    ]); ?> 
    

    希望這會幫助別人。

    +0

    不錯的一個。它幫助我 – Pratik

    +0

    謝謝,它的工作... – Ivan

    相關問題