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写入数据库类代码分享
Jul 26 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
Jun 19 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
Jun 23 PHP
php配合jquery实现增删操作具体实例
Dec 12 PHP
PHP return语句另类用法不止是在函数中
Sep 17 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
Apr 15 PHP
php简单实现屏蔽指定ip段用户的访问
Apr 29 PHP
php+mysql实现简单的增删改查功能
Jul 13 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
PHP实现上传多文件示例代码
Feb 20 PHP
PHP数组Key强制类型转换实现原理解析
Sep 01 PHP
如何用PHP实现分布算法之一致性哈希算法
May 26 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获取远程图片并把它保存到本地的代码
2008/04/07 PHP
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
PHP数学运算函数大汇总(经典值得收藏)
2016/04/01 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
jquery tools系列 expose 学习
2009/09/06 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
jquery实现左右无缝轮播图
2020/07/31 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
Node使用Selenium进行前端自动化操作的代码实现
2019/10/10 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
python实现一个简单的ping工具方法
2019/01/31 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
python模块常用用法实例详解
2019/10/17 Python
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
高中体育教学反思
2014/01/29 职场文书
家具促销活动方案
2014/02/16 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
2014年政务公开工作总结
2014/12/09 职场文书
商务邀请函
2015/01/30 职场文书
医院保洁员管理制度
2015/08/05 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android