加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

实例讲授YII2中多表关联的行使要领

发布时间:2021-01-25 16:16:08 所属栏目:编程 来源:网络整理
导读:媒介 本文对 YII2.0 的多表关联查询做一个简朴的先容。文中通过实例代码先容的很是具体,下面话不多说,来一路看看具体的先容: 起首先来声名一下表布局 表布局 此刻有订单表、用户表、商品清单表、商品库存表 在YII中,假如想直接关联其他表举办查询的话,

媒介

本文对 YII2.0 的多表关联查询做一个简朴的先容。文中通过实例代码先容的很是具体,下面话不多说,来一路看看具体的先容:

起首先来声名一下表布局

表布局

此刻有订单表、用户表、商品清单表、商品库存表

实例讲授YII2中多表关联的行使要领

实例讲授YII2中多表关联的行使要领

在YII中,假如想直接关联其他表举办查询的话,必要先在模子里界说它们的关联

Order

// 关联函数以get+要关联的数据表名来定名
// 这是获取下订单的客户
public function getUser(){

// 第一个参数为要关联的子表模子类名,
// 第二个参数指定 通过子表的user_id,关联主表的usesr_id字段
// 这里写清晰点或许意思就是User.user_id => Order.user_id
return $this->hasMany(User::className(),['user_id' => 'user_id']);
}
}

1、hasMany、hasOne行使

Yii2中的表之间的关联有2种,它们用来指定两个模子之间的关联。

●一对多:hasMany ●一对一:hasOne

●返回功效:这两个要领的返回功效都为yiidbActiveQuery工具(假如你想最后返回的是尺度数组情势,记得加上asArray()参数)

●第一个参数:所关联的模子的类名称。

●第二个参数:是一个数组,个中键为所关联的模子中的属性,值为当前模子中的属性。

关联的行使

此刻我们来实行获取一个订单

user;

虽然你可以选择行使with要领,这样看起来简捷一些,个中with的参数为相关的名称,也就在model内里界说的getUser中的user.

with('user'); //可能 $order = Order::find(1)->getUser();

上面的代码会天生并执行如下的sql语句

从上面可以看出会见一个关联的时辰有两种要领

●假如以函数的方法挪用,会返回一个 ActiveQuery 工具($customer->getOrders()->all())

●假如以属性的方法挪用,会直接返回模子的功效($customer->orders)

关联功效缓存

假如这时order表产生了改变,我们但愿再次查询的话

user;

再次获得订单的时辰你会发明没有变革。缘故起因是只会在第一次执行$order->user的时辰才会去数据库内里查询,然后会把功效缓存起来,往后查询的时辰都不会再执行sql。

那么假如你想再次执行sql怎样做呢?可以执行

user); $order->user;

跨表查询

下面重点来了!通过上面表布局的图可以看到,User表和Order_goods暗示没有直接关联的,那么假如我们想按照用户信息查找这个用户买了哪些商品的话,就势必需要通过Order表去关联两张表。那么该怎么做呢?起首照旧model层。由于我们是按照用户去查,以是到User的model层去界说关联。

User

hasMany(Order::className(),['user_id' => 'user_id']); }

public function getOrderGoods() {
return $this->hasMany(OrderGoods::className(),['order_id' => 'order_id'])->
via('order');
}

这里留意:getOrderGoods中的第二个order_id是指getOrder关联的Order中的order_id,第一个order_id是指OrderGoods中的order_id。

可是!我们尚有最简朴的要领,那就是行使SQL语句啦!

$list1 = Article::findBySql($map)->asArray()->all();

这样根基就是整个关联部门了

总结

以上就是这篇文章的所有内容,但愿本文的内容对各人的进修可能事变能带来必然的辅佐,假若有疑问各人可以留言交换,感谢各人对编程之家的支持。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读