2015-08-23 45 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

    相关问题