2017-02-28 58 views
0

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

我已经成功地加入了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->名(名称为在位置表中的字段)

我该如何做?

  1. responses.task_id = tasks..id

  2. tasks.location_id = locations.id

  3. locations.task_group.id = task_group.id

  4. task_group->名(名称是task_group表中的字段)

回答

0

完成它,赫雷斯如何。

我这样做是在视图

.... 
'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', 
    ..... 
], 
.....