位置: 编程技术 - 正文

Yii多表联合查询操作详解(多表联动查询)

编辑:rootadmin

推荐整理分享Yii多表联合查询操作详解(多表联动查询),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:多表联查怎么优化,多表联结查询,多表联查join,多表联结查询,多表联合查询语句,多表联结查询,多表联合查询有几种方式,多表联动查询,内容如对您有帮助,希望把文章链接给更多的朋友!

本文针对Yii多表联查进行汇总描述,供大家参考,具体内容如下

1、多表联查实现方法

有两种方式一种使用DAO写SQL语句实现,这种实现理解起来相对轻松,只要保证SQL语句不写错就行了。缺点也很明显,比较零散,而且不符合YII的推荐框架,最重要的缺点在于容易写错。

还有一种便是下面要说的使用YII自带的CActiveRecord实现多表联查

2、 整体框架

我们需要找到一个用户的好友关系,用户的信息放在用户表中,用户之间的关系放在关系表中,而关系的内容则放在关系类型表中。明显的我们只需要以关系表为主表联查其他两个表即可。我主要从代码的角度,分析下实现的过程。

3、CActiveRecord

我们首先需要对3张表建立相应的model,下面是关系表的代码

SocialRelation.php

为了描述方便我们约定 主表为A表(执行查询的那个表), 引用表为B表(外键所引用的表)建议使用Gii自动生成模型,这样能够节省大量时间,为了测试方便,可以对主表生成CRUD,就是增删改查页面,其他的引用表只用生成model就行了。1. model函数、tablename函数用于得到这个模型和得到数据库表基本信息。自动生成无需修改

2.rules函数,这个函数主要用于规定参数检验方式,注意即使有些参数不需要校验,也必须出现在rules中。不然模型将无法得到参数

3.relation函数,这个函数十分关键,用于定义表之间的关系,下面我将详细说明其中含义

'relationType' => array(self::BELONGS_TO, 'SocialRelationType', 'relation_type_id') 这句代码中结构如下'VarName'=>array('RelationType', 'ClassName', 'ForeignKey', ...additional options)VarName 是关系的名字,我们以后会用这个名字访问外键引用表的字段

RelationType是关系的类型,十分重要,如果设定错误会导致一些奇怪而且难以检查的错误,Yii一共提供了4种关系

BELONGS_TO(属于): 如果表 A 和 B 之间的关系是一对多,则 表 B 属于 表 A HAS_MANY(有多个): 如果表 A 和 B 之间的关系是一对多,则 A 有多个 B HAS_ONE(有一个): 这是 HAS_MANY 的一个特例,A 最多有一个 BMANY_MANY: 这个对应于数据库中的 多对多关系ClassName是引用表名,就是外键所引用的表的名字,也就是B表表名

ForeignKey是外键名,主要这里填写的是外键在主表中的名字,也就是外键在A表中的表名,切记不要填错了

如果B表中是双主键可以采用下列方式实现,从软件工程的角度不推荐这样的做法,每个表最好使用独立无意义主键,不然容易出现各种问题,而且不方便管理

additional option 附加选项,很少用到4 attributeLabels函数,这就是表属性的显示名称了,有点点像powerdesigner中code和name的关系前面一部分为数据库字段名,后面一部分为显示名称5 search函数,用于生成表查询结果的函数,可以在此加一些限制条件,具体的使用方法就不在这里说明了,可以参考API中CDbCriteria的讲解。如果使用Gii生成那么不需要怎么修改。

同理我们生成,剩下的两个引用表

Yii多表联合查询操作详解(多表联动查询)

关系类型表:SocialRelationType.php

用户表:AccessUser.php

4、Controller三张表介绍完了后,下面就应当介绍Controller了,同样的我们使用Gii生成主表(A表)的CRUD后就能得到controller,我们只需要对其进行一些修改即可,代码如下

SocialRelationController.php

简单介绍下其中各个函数和变量$layout 就是布局文件的位置了,布局文件如何使用,这里不做讨论

filters 定义过滤器,这里面水很深

accessRules 访问方式,就是那些用户能够访问到这个模块

allow 表示允许访问的规则如下,deny表示拒绝访问的规则如下。action表示规定规则使用的动作

user表示规则适用的用户群组,*表示所有用户,@表示登录后的用户,admin表示管理员用户

actionXXX 各个action函数

这里值得注意的是 这个函数

其中我们可以在dataProvider中设置相应的查询条件,注意这里设置是对于主表(A表)进行的,用的字段名也是主表中的,因为我们要显示的是当前用户的好友,于是,这里我们使用Yii::app()->user->id取得当前用户的id 。

loadModel 用于装载模型,这里我们可以看到findByPk查询了数据库。

performAjaxValidation 用于Ajax验证。

5、视图View

index.php

我们使用一个 CListView控件进行显示,其中itemView为内容显示的具体表单,dataProvider这个是内容源,我们在controller中已经设定了。

_view.php

主要都是类似的,我们看其中的一条 第一行为显示标签,在模型中我们设定的显示名就在这里体现出来第二行为内容显示,这里的relationType是在模型中设置的关系名字,后面的relation_type_name是引用表的字段名(B表中的名字)

6、总结

通过上面的步骤,我们就实现了整个联合查询功能,效果图如下所示:

标签: 多表联动查询

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

上一篇:yii2分页之实现跳转到具体某页的实例代码(easyui分页)

下一篇:php for 循环使用的简单实例(php的foreach循环语句)

  • 报废汽车残值收入
  • 个人所得税如何办理退税
  • 没有销项税只有进项税需要结转未交增值税吗
  • 经营性收入包括投资收益吗
  • 增值税开票内容货物及应税劳务服务名称都有哪些
  • 定期定额纳税申报表应税项应填哪个数
  • 团队接待的程序及标准
  • 未计提企业所得税怎么写分录
  • 事业单位公务卡制度
  • 去年漏记了收入,可以记今年吗
  • 特殊销售方式下销售额的确定
  • 应有财务软件
  • 单位购买食品饮料的进项税可以抵扣吗?
  • 个人投资理财需要注意什么
  • 外省农村户口可以迁到外省农村吗
  • 建筑企业1%承包承租个人所得税的会计分录
  • 差额征税发票如何做分录
  • 税号里的0是字母还是数字
  • 试运营和正式运营间隔
  • 增值税专用发票和普通发票的区别
  • 加油的普票可以抵扣进项税吗
  • 税控盘超期还能清卡吗
  • 增值税抵扣联退税多少
  • 处置子公司合并抵消
  • 授权费计入什么科目
  • 消费税应纳税额计算方法是什么有何特点
  • 筹建期的餐饮费会计分录
  • 非金融类企业的货币资金主要包括哪些内容?
  • win11怎么下载手机应用
  • 可引导的macos
  • 要求快速启动
  • 打印机5b00错误解决
  • 公司贷款过桥费合法吗
  • 期间费用计入产后成本吗
  • 向政府购买土地使用权
  • 电脑刷新率怎么调低
  • 生产型企业出口不是自己生产的东西
  • 补缴的土地出让金需要计提吗
  • 企业所得税征收点
  • 进项税额转出的所有会计分录
  • php浮点数
  • 前端部署发布项目有哪些
  • 售后租回交易的资产销售价低于市场价承租人作为
  • 员工宿舍的物业费能否抵扣
  • 织梦怎么采集文章
  • 主营业务收入未收到钱
  • 个人所得税专项附加扣除赡养老人
  • 公司之间往来款需要交税吗
  • 税控盘 金税盘
  • 个体工商户营业执照注销流程
  • 退休职工费用可以税前扣除吗
  • 私车公用必须是公司员工的车吗?
  • 生产出口退税企业有哪些
  • 银行账跨年一直没做怎么补
  • 帮别人注册医疗器械法人有风险吗
  • 这个月要交增值税怎么做账务处理
  • 汽车生产企业三大战略
  • 什么是限售股融券
  • 电子承兑汇票如何入账
  • 银行存款日记账模板
  • mysql修改默认字符集和校对规则
  • 修改window
  • centos7如何设置中文
  • 电脑系统win7怎么看
  • win8系统怎么查看隐藏文件
  • ubuntu下mysql的常用命令
  • win8系统故障了怎么办
  • 红石使用基础教学
  • 鲁大师安装失败怎么回事
  • win10在更新界面怎么办
  • windows小娜怎么开启
  • windows8.1怎么设置密码
  • jquery ztree实现右键收藏功能
  • node·js
  • anaconda使用指南
  • opengl mc
  • shell脚本用法
  • 用js实现一个复杂对象深拷贝的算法
  • 瀑布流软件
  • 江苏国家税务机关电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设