php with语法,Yii框架关联查询with用法分析

本文实例分析了Yii框架关联查询with用法。分享给大家供大家参考。具体方法如下:

Yii框架关联查询与mysql中的关联查询会有什么区别呢?这里小编就与各位来一起来看看吧。

Yii的关联查询确实是一个方便的东西,网上的资料也很多,但是大部分都是Ctrl+c,Ctrl+v,有些东西一直没有人出来详细的写篇文章说明一下,在参考了网上很多资源以后,加上自己的的一些理解,写下了这篇文章,给广大初学者朋友们提供一点个人见解。

YII 支持四种类型的关系:

BELONGS_TO(属于): 如果表 A 和 B 之间的关系是一对多,则 表 B 属于 表 A (例如 Post 属于 User);

HAS_MANY(有多个): 如果表 A 和 B 之间的关系是一对多,则 A 有多个 B (例如 User 有多个 Post);

HAS_ONE(有一个): 这是 HAS_MANY 的一个特例,A 最多有一个 B (例如 User 最多有一个 Profile);

MANY_MANY: 这个对应于数据库中的 多对多 关系。 由于多数 DBMS 不直接支持 多对多 关系,因此需要有一个关联表将 多对多 关系分割为 一对多 关系。

菜鸟们看到这个真的能明白吗?

初学的时候,个人表示头晕至极,经过反复的测试,我给大家非常直白的解释一下。

现有用户表user和博客表blog,博客是属于某个用户的,而用户会发表多篇博客。

BELONGS_TO:controller

$blogs = $blog_model->with('b_user')->find();

model 这里的model指的是blog_model

'b_user'=>array(self::BELONGS_TO, 'user', 'author')

适用范围,查找博客的时候需要把博客的作者也查出来。

b_user中第二个参数:子表的表名,第三个参数,主表中用于存子表主键的字段(blog表中用于存user表主键的字段)。

HAS_ONE:controller

$user_blog = $user_model->with('u_blog')->find();

model 这里的的model指的是user_model

'u_blog'=>array(self::HAS_ONE, 'blog', 'author')

测试一下,不仅仅查出了作者的信息,而且还查出了一篇该作者的博客。

u_blog中的第二个参数:子表表名,第三个参数,子表中用于存主表主键的字段(blog表中用于存user表主键的字段)。

HAS_MANY:controller

$user_blogs = $user_model->with('u_blogs')->find();

model 这里的的model指的是user_model

'u_blogs'=>array(self::HAS_MANY, 'blog', 'author')

测试一下,不仅仅查出了作者的信息,也不仅仅查出了一篇该作者的博客,而且还查出了该作者其它的博客。

u_blogs中的第二个参数:子表表名,第三个参数,子表中用于存主表主键的字段(blog表中用于存user表主键的字段)。

MANY_TO_MANY:这个东西啊,我还没用过,貌似基本上也不会用到,待我测一下,再来续上。。。

至此,Yii with的最最基本用法说的差不多了,但是你就没有啥疑问吗?

如何指定要查询的子表字段?

HAS_MANY中查出了该用户的所有文章,如果我只想要查5篇呢?

……等你来提问。

那么,废话不多说,解决第一个问题

'u_blogs'=>array(self::HAS_MANY, 'blog', 'author','select'=>'gid,title,content')

这样试试?

第二个问题

'u_blogs'=>array(self::HAS_MANY, 'blog', 'author','select'=>'gid,title,content','condition'=>'u_blogs.gid=2')

搞定!

相信看过这些非常小白的讲解后应该恍然大悟了吧。此所谓万事开头难啊,剩下的东西相信你一看就懂了~~~

以下内容来自Yii手册:

延迟加载时有一定的关系,下列选项可用:

'group': string, GROUP BY子句。 默认值为空。 注意,列引用需要加入'relationName'前缀 。(例如: relationName.age)。此选项仅适用于HAS_MANY 和 MANY_MANY 关系。

'having': string, HAVING子句。 默认值为空。 注意,列引用需要加入'relationName'前缀 。(例如: relationName.age)。此选项仅适用于HAS_MANY 和 MANY_MANY 关系。

'limit': 数据行的limit选择。 这个选项不能应用到BELONGS_TO。

'offset': 数据行的偏移量。 这个选项不能应用到BELONGS_TO。

'through': 获取相关的数据时将用作桥的模型的关系的名称。可以设置仅为 HAS_ONE 和 HAS_MANY。此选项自版本 1.1.7 可用。

以下是一个例子,为 'Post' 活动记录类相关对象的一个示例:

return array(

'author'=>array(self::BELONGS_TO, 'User', 'author_id'),

'comments'=>array(self::HAS_MANY, 'Comment', 'post_id', 'with'=>'author', 'order'=>'create_time DESC'),

'tags'=>array(self::MANY_MANY, 'Tag', 'post_tag(post_id, tag_id)', 'order'=>'name'),

);

希望本文所述对大家的yii框架程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

itools苹果录屏大师_iTools Pro 1.8.0.4 简单易用的苹果设备 iPhone/iPad 管理工具

iTools Pro是一款Mac上非常好用的iOS设备管理工具,具有应用、照片、音乐、电影、铃声、图书、通讯录、文件管理、实时桌面等基础功能。iTools Pro Mac还有音乐、电影、铃声格式转换、录屏大师、铃声制作、备份还原等功能,支持最新的 iOS和 OS X 系统。iT…

继承和多态二:虚析构函数

虽然我们已经知道了什么是继承和多态,也明白了多态依赖于继承,但是在多态中存在哪些问题呢? 多态中可能存在的内存泄露问题 例如下面的程序中,在圆形Circle的类中定义一个圆心的坐标,并且坐标是在堆中申请的内存&#…

李开复对话彭特兰:AI 不是单打独斗,应避免 AI 冷战!

来源:CSDN近日,创新工场董事长兼CEO李开复博士与阿莱克斯彭特兰教授(Alex Pentland)展开了一场”AI如何重塑人类社会”的精彩对话。《连线》杂志的资深撰稿人威尔奈特(Will Knight)主持了这场对话。阿莱克斯…

iphone最新款手机_iPhone 丢了99.9%能找回?这种做法不可信!!

目前,手机已经成为我们生活中必不可少的一部分,科技发展带来消费场景的变化,到处都能扫一扫,让手机显得更加重要,你可以不带钱包出门,但不能不带手机。丢钱包的概率变低,丢手机的概率变高了&…

sql获取日期相差天数oracle,找到oracle sql中两个日期之间的经过时间

当您减去两个DATE值(如enddate – startdate)时,您会得到带小数精度的天数差异,因此例如1.5表示1 1/2天或36小时.您可以使用大量数学将其转换为HH:MI:SS,但更简单的方法是使用NUMTODSINTERVAL函数将十进制值转换为INTERVAL DAY TO SECOND值:N…

唐杰:AI 未来靠迭代

来源 | 北京智源人工智能研究院未来十年人工智能将如何发展?清华大学教授、智源研究院副院长唐杰认为:认知智能将成为一个重要的且可能实现的方向。具体来说,便是 System 1 和 System 2 的循环往复,不断迭代,从而打造出…

影视感悟

《一条狗的使命》 首先要开心只要有可能,就竭尽全力去帮助别人舔你爱的人对过去的事不要一副苦瓜脸对未来也不要愁眉苦脸只要活在当下活在当下收住挑衅脾气烈火,不轻易做过激行为,不轻易先动手打人 转载于:https://www.cnblogs.com/linkenpar…

php中用户验证的方式,在php中进行用户身份验证的最佳方式是什么?

使用Sessions.将会话ID存储在cookie中,并将用户的状态存储在服务器端(loggedIn,userId,IP).澄清您需要存储在会话数组中:> loggedIn:一个关于用户是否登录的布尔变量.您可以为多个会话重复使用相同的Cookie,因此您可以在下次访问您的网站时记住用户的…

linux服务器配置与管理_服务器维护实施步骤

为了有效地维护服务器,服务器管理员必须执行主动的硬件和软件检查。而服务器的维护清单必须包括除尘、日志查看、软件补丁程序测试等。即使具有服务器的性能和冗余功能,增加的工作负载整合和可靠性期望也会对服务器硬件造成损害。服务器维护清单应涵盖物…

常用数据库的分页实现

MySQL: 可以得出符合我们自己需求的分页sql格式是:select * from table limit (start-1)*limit,limit; 其中start是页码,limit是每页显示的条数。 SqlServer: Oracle: 转载于:https://www.cnblogs.com/gzu-link-pyu/p/…

量子信息技术研究现状与未来

来源:专知量子信息技术是量子力学与信息科学融合的新兴交叉学科, 它的诞生标志着人类社会将从经 典技术迈进到量子技术的新时代, 本文将阐述量子信息技术的研究现状与未来. 文中描绘了量子技术 发展远景, 即筑建各种类型的量子网络, 包括量子云计算网络、分布式量子…

检测oracle的语句,oracle功能检测sql语句

1. 监控事例的等候select event,sum(decode(wait_Time,0,0,1)) "Prev",sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot"from v$session_Waitgroup by event order by 4;2. 回滚段的争用情况select name, waits, gets, waits/gets "Rat…

idea springmvc项目搭建_ssm框架整合搭建流程 - 小白小承

刚学完Mybatis&#xff0c;Spring&#xff0c;SpringMVC尝试进行一个整合开发&#xff0c;记录一下搭建流程1.环境与开发工具IDEAMySQL 8.0.16Tomcat 9.0.21Maven 3.6.12.项目准备1.创建一个maven工程2.依赖注入<dependencies><dependency><groupId>junit<…

21世纪科技生态面临第三次全球标准

来源&#xff1a;中国社会科学报 前言&#xff1a;本文2020年9月29日发表与“中国社会科学报”&#xff0c;原文标题"科技生态面临新全球标准”&#xff08;略有修改&#xff09;。2007年以来&#xff0c;我们对21世纪前沿科技生态发展的规律进行研究。提出互联网从网状…

adb push ,adb pull和adb install的区别

1、用命令行把手机上的文件拷贝到电脑上 1adb pull sdcard/1222073679.png拷贝文件夹命令&#xff0c;如把log文件夹拷贝到电脑当前目录 1adb pull sdcard/log/拷贝文件夹到当前文件夹下的某文件夹里面&#xff0c;如拷贝360文件夹到当前文件夹的360里面 1adb pull sdcard/360/…

php+jquery实现图片上传预览_和拖动位置值,PHP教程:thinkphp jquery实现图片上传和预览效果...

《PHP教程&#xff1a;thinkphp jquery实现图片上传和预览效果》要点&#xff1a;本文介绍了PHP教程&#xff1a;thinkphp jquery实现图片上传和预览效果&#xff0c;希望对您有用。如果有疑问&#xff0c;可以联系我们。PHP学习PHP学习那个file按钮样式先忽略PHP学习点击选择图…

屏幕中间显示已停用缩放_有关标签打印软件缩放工具的介绍

在标签打印软件中设计标签时&#xff0c;为了方便编辑&#xff0c;有时会根据自己的需求放大缩小标签来精确位置大小等&#xff0c;做更细致的调整&#xff0c;这时就会用到缩放工具。下面&#xff0c;主要就是给大家介绍标签打印软件缩放工具的用处&#xff1a;在标签打印软件…

集合(2)

Linkedlist特有的方法 增加头Link.addFirst(“tou”); 增加尾Link.addLast(“tou”); 获取头Link.getFirst(); 获取尾Link.getLast(); 获取并删除头Link.removeFirst(); 获取并删除尾Link.removeLast(); 在获取元素时&#xff0c;链表为空就会报notsuchelementException。 在1.…

机器学习揭示了人类大脑的新见解

来源&#xff1a;科学杂志由新加坡国立大学(NUS)科学家领导的跨学科研究团队已成功地利用机器学习来发现对人脑细胞结构的新见解。该团队展示了一种使用从功能磁共振成像(fMRI)收集的数据自动估算大脑参数的方法&#xff0c;使神经科学家无需使用手术手段即可探测大脑&#xff…

dram和nand哪个难生产_仅300名员工,年产7台,订单排到5年后,比光刻机还难买...

如今半导体行业发展成为如今一大热议话题&#xff0c;如今不管在哪个行业几乎都要用到芯片&#xff0c;在以前可能手机行业对于芯片的需求量更高一些&#xff0c;然而近些年来不同领域的厂商都争相开始发展智能机&#xff0c;而这其中就离不开芯片技术&#xff0c;华为的麒麟芯…