首页 > 开发 > PHP > 正文

实例讲解YII2中多表关联的使用方法

2024-05-04 22:46:27
字体:
来源:转载
供稿:网友

前言

本文对 YII2.0 的多表关联查询做一个简单的介绍。文中通过实例代码介绍的非常详细,下面话不多说,来一起看看详细的介绍:

首先先来说明一下表结构

表结构

现在有订单表、用户表、商品清单表、商品库存表

在YII中,如果想直接关联其他表进行查询的话,需要先在模型里定义它们的关联

Order

class Order extends /yii/db/ActiveRecord.{  // 关联函数以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()参数)

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

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

关联的使用

现在我们来尝试获取一个订单

//获取订单信息$order = Order::findOne(1);//根据订单信息获取到用户信息$user = $order->user;

当然你可以选择使用with方法,这样看起来简洁一些,其中with的参数为关系的名称,也就在model里面定义的getUser中的user.

//返回订单信息(包括用户信息)$order = Order::find(1)->with('user');//或者$order = Order::find(1)->getUser();

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

SELECT * FROM order WHERE id=1;SELECT * FROM user  WHERE user.user_id=order.user_id;

从上面可以看出访问一个关联的时候有两种方法

       ●如果以函数的方式调用,会返回一个 ActiveQuery 对象($customer->getOrders()->all())

       ●如果以属性的方式调用,会直接返回模型的结果($customer->orders)

关联结果缓存

如果这时order表发生了改变,我们希望再次查询的话

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表