laravel ORM关联关系中的 with和whereHas用法


Posted in PHP onOctober 16, 2019

with 渴求式预加载 可以有效的避免 N+1 问题,用法如下:

$books = App\Book::with('author')->get();

如果有多个关联关系可以用“,”隔开,还可以使用闭包来对关联关系进行限制,向下面这样:

//查询所有的用户,查询条件:发布过标题中有first的post 
$users = User::with(['posts' => function ($query) {
  $query->where('title', 'like', '%first%');
}])->get();

结果会查找所有的用户,返回的每个用户信息中都会多一个posts数组,但是posts数组可能为空(不符合查询要求),没有筛选功能

with 更像 sql 中的 join,就是你存不存都有执行,存在结果不为空,存在关联结果,不存在结果为空,关联结果为空

whereHas 查询存在的关联关系,还有对应的 whereDoesntHave ,查询不存在的关联关系,像下面这样:

// 获取发布文章标题中有first的用户
$users= User::whereHas('posts', function ($query) {
  $query->where('title', 'like', '%first%');
})->get();

结果会查找发布过文章标题包含first的部分用户,有筛选功能

whereHas 就是在关联关系上筛选,只筛选符合条件的,适合查找 存在不存在

感觉 with 更多的用在查看详情的时候,你想知道你的查看对象的具体信息,关联到的内容是怎样的,

而 whereHas 更多的用在筛选,你要把符合条件的关联关系的对象给他找出来。

就像用户发文章, user 存在关联关系 post,如果是 user->with('post'),你会得到所有用户和用户发布的文章信息,没发文章的用户就没有文章信息,如果是 user->whereHas('post'), 那拿到的可就是发过文章的用户。

这就是我对 with 和 whereHas 的一些理解了

以上这篇laravel ORM关联关系中的 with和whereHas用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
如何去掉文章里的 html 语法
Oct 09 PHP
ie6 动态缩略图不显示的原因
Jun 21 PHP
基于PHP编程注意事项的小结
Apr 27 PHP
php实现cc攻击防御和防止快速刷新页面示例
Feb 13 PHP
destoon二次开发入门示例
Jun 20 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
Sep 09 PHP
MyEclipse常用配置图文教程
Sep 11 PHP
php中ftp_chdir与ftp_cdup函数用法
Nov 18 PHP
PHP 中魔术常量的实例详解
Oct 26 PHP
laravel dingo API返回自定义错误信息的实例
Sep 29 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 PHP
PHP使用Redis队列执行定时任务实例讲解
Mar 24 PHP
laravel 模型查询按照whereIn排序的示例
Oct 16 #PHP
解决Laravel无法使用COOKIE和SESSION的问题
Oct 16 #PHP
laravel 使用事件系统统计浏览量的实现
Oct 16 #PHP
关于laravel 子查询 & join的使用
Oct 16 #PHP
laravel高级的Join语法详解以及使用Join多个条件
Oct 16 #PHP
Laravel 连接(Join)示例
Oct 16 #PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
Oct 16 #PHP
You might like
基于PHP实现的事件机制实例分析
2015/06/18 PHP
PHP实现Huffman编码/解码的示例代码
2018/04/20 PHP
PHP标准库(PHP SPL)详解
2019/03/16 PHP
PHP实现时间日期友好显示实现代码
2019/09/08 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
jquery $.ajax入门应用二
2008/11/19 Javascript
js tab效果的实现代码
2009/12/26 Javascript
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
简介JavaScript中的getSeconds()方法的使用
2015/06/10 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
微信小程序实现图片放大预览功能
2020/10/22 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
下载糗事百科的内容_python版
2008/12/07 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
美国最大的团购网站:Groupon
2016/07/23 全球购物
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
建筑投标担保书
2014/05/20 职场文书
教师考核材料
2014/05/21 职场文书
保安公司服务承诺书
2014/05/28 职场文书
庆七一活动总结
2014/08/27 职场文书
2015年大学元旦晚会活动策划书
2014/12/09 职场文书
2015年房地产个人工作总结
2015/05/26 职场文书
初中团委工作总结
2015/08/13 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript