位置: 编程技术 - 正文

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

编辑:rootadmin

推荐整理分享实例讲解YII2中多表关联的使用方法,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

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

首先先来说明一下表结构

表结构

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

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

Order

1、hasMany、hasOne使用

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

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

●返回结果:这两个方法的返回结果都为yiidbActiveQuery对象(如果你想最后返回的是标准数组形式,记得加上asArray()参数)

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

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

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

关联的使用

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

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

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

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

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

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

关联结果缓存

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

再次得到订单的时候你会发现没有变化。原因是只会在第一次执行$order->user的时候才会去数据库里面查询,然后会把结果缓存起来,以后查询的时候都不会再执行sql。

那么如果你想再次执行sql如何做呢?可以执行

跨表查询

下面重点来了!通过上面表结构的图可以看到,User表和Order_goods表示没有直接关联的,那么如果我们想根据用户信息查找这个用户买了哪些商品的话,就势必需要通过Order表去关联两张表。那么该怎么做呢?首先还是model层。因为我们是根据用户去查,所以到User的model层去定义关联。

User

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

但是!我们还有最简单的方法,那就是使用SQL语句啦!

这样基本就是整个关联部分了

总结

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

本文链接地址:https://www.jiuchutong.com/biancheng/291012.html 转载请保留说明!

上一篇:Laravel接收前端ajax传来的数据的实例代码(laravel app接口)

下一篇:YII2框架中excel表格导出的方法详解(yii2框架中文手册)

  • 坏账准备应计入
  • 主营业务成本为什么在借方
  • 可变现净值与公允价值孰低
  • 个税专项扣除做什么用
  • 售后维修费怎么开票
  • 结转已完工产品会计分录
  • 吊车租赁费计入什么会计科目
  • 公司招待用烟酒的管理
  • 返还的个税手续费奖励给个人需要缴纳个税吗
  • 利润转增资本交什么税
  • 存货中的生产成本是指
  • 销售的增长率公式是什么
  • 什么是应付债券简单举例
  • 固定资产暂估入账后续调整
  • 施工企业资产负债率
  • 资产负债表要填年初余额吗
  • 药品入库和出库必须执行什么制度
  • 食堂购买蔬菜计算公式
  • QuickBooks - QuickBooks是什么进程 有什么用
  • 应收票据冲转是什么科目
  • php测验
  • 退多收款怎么做分录
  • 期间费用为什么叫期间费用
  • 辅导期内的企业有哪些
  • 最贵的苹果4
  • php数组有哪几种类型
  • 带息应收票据应于收到或开出或承兑时
  • php语言版本
  • yolov教程
  • php关联数组和索引数组的区别
  • 无偿转让房屋
  • 劳务公司给包工头打款备注写什么
  • uniapp中uni.navigateTo传递变量
  • NovelAi + Webui + Stable-diffusion本地配置
  • 微信小程序怎么制作自己的小程序
  • mac m1 安装windows
  • 魔改是啥
  • 英文描述什么是利润表
  • 消费税增值税和个人所得税是什么意思
  • mysql无法连接到服务器
  • 有限公司也可以向股东核发股票
  • 日用品开增值税专用发票可以抵扣吗
  • 计提怎么理解
  • 民办非企业的税务登记国税还是地税
  • 个税代扣代缴手续费返还需要缴纳增值税吗
  • 个人建筑安装属于劳务吗
  • 医院绿化方案
  • 个人住的房子要交房产税吗
  • 会计丁字记账法
  • 承租人转租房屋的后果
  • 厂家给的返利应该怎么做会计分录
  • 银行代发工资业务收费吗
  • 单位的收入是刷卡怎么做账?
  • 不动产进项税额转出
  • 交通运输业包含
  • 营业外支出增加说明了什么
  • 会计凭证会计账簿与账务处理程序
  • ubuntu20 vnc
  • system is boot up with
  • windowxp操作系统
  • windows media player找不到媒体流
  • windows xp能装微信吗
  • centos查看具体版本
  • 怎么让微软账户获得所有权限
  • win7更改ip地址后有网络无法上网
  • cocos设计模式
  • node.js wss
  • 一键删除通讯录联系人
  • 批处理修改文件后缀名
  • android升级是什么意思
  • vue移动端图片预览
  • 用jQuery的AJax实现异步访问、异步加载
  • 菜鸟 javascript
  • python爬虫入门教程
  • 简洁实用的公司治理机制
  • androidsdk的计算机
  • 车库契税怎么收费
  • 卷式发票如何查验真伪
  • 江苏省教师增量绩效多少
  • 销售哪些产品需要基金从业资格证?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设