在GridView中连接多个表

时间:2017-02-28 03:29:01

标签: yii2 yii2-advanced-app yii2-model

我正在使用yii2框架并尝试连接多个表。

我已经设法加入了3个表,但我不清楚如何将它扩展到4个表。

I joined three tables as follows >>>

//In Tasks Model 
public function getLocation()
{
    return $this->hasOne(Locations::className(), 
    ['id' => 'location_id']);
}

//in current Model
public function getLocation()
{
    return $this->hasOne(Tasks::className(),['id'=>'task_id'])
         ->with(['location']);
}


//then in grid view
....
'columns' => [
     [
        ....
        [
          class' => 'kartik\grid\DataColumn',
          'label' => 'Name',
          'value' => 'tasks.location.name',
        ],
        ....

这样工作正常,但我现在想加入一个与位置相关的附加表。连接将是locations.task_group_id = task_group.id。完全加入如下

****我成功完成上述****

  1. responses.task_id = tasks..id

  2. tasks.location_id = locations.id

  3. locations-> name(name是locations表中的字段)

  4. 我该怎么做?

    1. responses.task_id = tasks..id

    2. tasks.location_id = locations.id

    3. locations.task_group.id = task_group.id

    4. task_group-> name(name为task_group表中的字段)

1 个答案:

答案 0 :(得分:0)

完成它,Heres如何。

我在视图中这样做了

 ....
 'columns' => [
 ....
[
  'class' => 'kartik\grid\DataColumn',
  'value'=> 'tasks.location.taskowner.name',
  .....
],
.....

并且有效

******我的步骤********

任务模型中的

public function getLocation()
{
    return $this->hasOne(Locations::className(), 
     ['id' => 'location_id']);
}

在地点模型

public function getTasks()
{
    return $this->hasMany(Tasks::className(), 
      ['contractor_id' => 'id']);
}

public function getTaskOwner()
{
    return $this->hasOne(TaskOwner::className(), 
      ['id' => 'task_owner_id']);
}

在此模型中

public function getTasks()
{
    return $this->hasOne(Tasks::className(), ['id' => 'task_id']);
}

然后在此视图中使用网格视图小部件

  ....
 'columns' => [
 ....
[
  'class' => 'kartik\grid\DataColumn',
  'value'=> 'tasks.location.taskowner.name',
  .....
],
.....