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 相关文章推荐
php生成EXCEL的东东
Oct 09 PHP
php mysql数据库操作类
Jun 04 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
Oct 12 PHP
PHP中函数rand和mt_rand的区别比较
Dec 26 PHP
php的hash算法介绍
Feb 13 PHP
easyui的tabs update正确用法分享
Mar 21 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
Apr 08 PHP
PHP判断密码强度的方法详解
May 26 PHP
PHP框架laravel的.env文件配置教程
Jun 07 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
PHP count_chars()函数讲解
Feb 14 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
Feb 03 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通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
深入理解javascript作用域和闭包
2014/09/23 Javascript
js实现楼层导航功能
2017/02/23 Javascript
jquery网页加载进度条的实现
2017/06/01 jQuery
vue.js组件之间传递数据的方法
2017/07/10 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
vue项目中将element-ui table表格写成组件的实现代码
2019/06/12 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
在Vue中使用antv的示例代码
2020/06/29 Javascript
python读写ini配置文件方法实例分析
2015/06/30 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
python合并已经存在的sheet数据到新sheet的方法
2018/12/11 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
python中使用 xlwt 操作excel的常见方法与问题
2019/01/13 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
python实现替换word中的关键文字(使用通配符)
2020/02/13 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
优秀团队获奖感言
2014/02/19 职场文书
冬季施工防火方案
2014/05/17 职场文书
承诺书格式
2014/06/03 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
Nginx配置使用详解
2022/07/07 Servers