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 相关文章推荐
防止MySQL注入或HTML表单滥用的PHP程序
Jan 21 PHP
组合算法的PHP解答方法
Feb 04 PHP
PHP常用的文件操作函数经典收藏
Apr 02 PHP
php读取目录所有文件信息dir示例
Mar 18 PHP
php中cookie实现二级域名可访问操作的方法
Nov 11 PHP
php实现utf-8转unicode函数分享
Jan 06 PHP
java微信开发之上传下载多媒体文件
Jun 24 PHP
php实现博客,论坛图片防盗链的方法
Oct 15 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
Dec 13 PHP
在 PHP 和 Laravel 中使用 Traits的方法
Nov 13 PHP
一次项目中Thinkphp绕过禁用函数的实战记录
Nov 17 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脚本
2006/11/26 PHP
php 文件夹删除、php清除缓存程序
2009/08/25 PHP
yii框架通过控制台命令创建定时任务示例
2014/04/30 PHP
ThinkPHP 404页面的设置方法
2015/01/14 PHP
Laravel数据库读写分离配置的方法
2019/10/13 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
2019/10/24 PHP
js或css文件后面跟参数的原因说明
2010/01/09 Javascript
用JQuery调用Session的实现代码
2010/10/29 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
JS获取网页图片name属性的方法
2015/04/01 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
2015/07/17 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
浅谈node中的cluster集群
2018/06/02 Javascript
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
利用python程序生成word和PDF文档的方法
2017/02/14 Python
Python使用sorted排序的方法小结
2017/07/28 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
python求最大值最小值方法总结
2019/06/25 Python
Python实现最大子序和的方法示例
2019/07/05 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
实习医生自我评价
2013/09/22 职场文书
心灵捕手观后感
2015/06/02 职场文书
教师读书笔记
2015/06/29 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
Java中使用Filter过滤器的方法
2021/06/28 Java/Android
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫