在Yii2中使用模型连接表

在Yii2中使用模型连接表,yii,yii2,left-join,Yii,Yii2,Left Join,这是表1 id1 Name ------------ 1 value1 2 value2 这是表2 id2 Name id1 --------------------- 1 value1 2 2 value2 1 这是表3 id3 Name id2 --------------------- 1 value1 2 2 value2 1 这是表4 id4 Name id3 --------------

这是表1

id1  Name
------------
 1   value1
 2   value2
这是表2

id2  Name     id1
---------------------
 1   value1    2
 2   value2    1
这是表3

id3  Name     id2
---------------------
 1   value1    2
 2   value2    1
这是表4

id4  Name     id3
---------------------
 1   value1    2
 2   value2    1
我想将上述4个表连接到Yii2中的model

select * from table1 
left join table2 on table2.id2 = table1.id1
left join table3 on table2.id3 = table1.id2
left join table4 on table2.id4 = table1.id3

使用Gii生成模型,如果外键在数据库中定义良好,那么关系将在模型中生成。如果没有,那么您可以自己定义关系
然后,您应该能够通过以下操作访问模型表4的属性:

$table1 = Table1::findById(1);

var_dump($table1->table2->table3->table4->attributes);

使用Gii生成模型,如果外键在数据库中定义良好,那么关系将在模型中生成。如果没有,那么您可以自己定义关系
然后,您应该能够通过以下操作访问模型表4的属性:

$table1 = Table1::findById(1);

var_dump($table1->table2->table3->table4->attributes);
1.使用yii2activequery 步骤1:声明关系

要使用活动记录处理关系数据,首先需要在活动记录类中声明关系。任务很简单,只需为每个感兴趣的关系声明一个关系方法,如下所示

class TableOneModel extends ActiveRecord
{
    // ...
    public function getTableTwo()
    {
        return $this->hasMany(TableTwoModel::className(), ['id1' => 'id1']);
    }
}

class TableTwoModel extends ActiveRecord
{
    // ...
    public function getTableThree()
    {
        return $this->hasMany(TableThreeModel::className(), ['id2' => 'id2']);
    }
}
.....
same create table3 and table4 relation
若使用声明关系,则访问此关系属性将返回相关活动记录实例的数组;如果使用声明关系,则访问关系属性将返回相关的活动记录实例,如果未找到相关数据,则返回null

步骤2:访问关系数据

声明关系后,可以通过关系名称访问关系数据。这就像访问由关系方法定义的对象属性一样。因此,我们称之为关系属性。比如说,

$query = TableOneModel::find()
           ->joinWith(['tableTwo.tableThree'])
           ->all();
参考

2.使用yii2db查询 请参阅和。

1。使用yii2activequery 步骤1:声明关系

要使用活动记录处理关系数据,首先需要在活动记录类中声明关系。任务很简单,只需为每个感兴趣的关系声明一个关系方法,如下所示

class TableOneModel extends ActiveRecord
{
    // ...
    public function getTableTwo()
    {
        return $this->hasMany(TableTwoModel::className(), ['id1' => 'id1']);
    }
}

class TableTwoModel extends ActiveRecord
{
    // ...
    public function getTableThree()
    {
        return $this->hasMany(TableThreeModel::className(), ['id2' => 'id2']);
    }
}
.....
same create table3 and table4 relation
若使用声明关系,则访问此关系属性将返回相关活动记录实例的数组;如果使用声明关系,则访问关系属性将返回相关的活动记录实例,如果未找到相关数据,则返回null

步骤2:访问关系数据

声明关系后,可以通过关系名称访问关系数据。这就像访问由关系方法定义的对象属性一样。因此,我们称之为关系属性。比如说,

$query = TableOneModel::find()
           ->joinWith(['tableTwo.tableThree'])
           ->all();
参考

2.使用yii2db查询
请参阅和。

请提供型号详情。请提供型号详情。