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 相关文章推荐
sourcesafe管理phpproj文件的补充说明(downmoon)
Apr 11 PHP
在mysql数据库原有字段后增加新内容
Nov 26 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
Oct 29 PHP
PHP自动识别字符集并完成转码详解
Aug 02 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
Nov 26 PHP
PHP实现取得HTTP请求的原文
Aug 18 PHP
thinkphp3.0输出重复两次的解决方法
Dec 19 PHP
php使用socket post数据到其它web服务器的方法
Jun 02 PHP
PHP的Socket网络编程入门指引
Aug 11 PHP
浅谈PHP安全防护之Web攻击
Jan 03 PHP
关于PHP中协程和阻塞的一些理解与思考
Aug 11 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
Jan 21 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/03/07 PHP
详解PHP归并排序的实现
2016/10/18 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
JS 控制CSS样式表
2009/08/20 Javascript
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
js创建子窗口并且回传值示例代码
2013/07/02 Javascript
jsonp原理及使用
2013/10/28 Javascript
Javascript中的getUTCHours()方法使用详解
2015/06/10 Javascript
jQuery UI Bootstrap是什么?
2016/06/17 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
vue使用rem实现 移动端屏幕适配
2018/09/26 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
js实现转动骰子模型
2019/10/24 Javascript
es6 for循环中let和var区别详解
2020/01/12 Javascript
Python列表推导式的使用方法
2013/11/21 Python
python处理cookie详解
2014/02/07 Python
opencv python 基于KNN的手写体识别的实例
2018/08/03 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
使用npy转image图像并保存的实例
2020/07/01 Python
瑞典快乐袜子:Happy Socks
2018/02/16 全球购物
电气工程及其自动化自我评价四篇
2013/09/24 职场文书
车间班长岗位职责
2013/11/30 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书
python unittest单元测试的步骤分析
2021/08/02 Python
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs