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之第四天
Oct 09 PHP
php的一个登录的类 [推荐]
Mar 16 PHP
php学习之流程控制实现代码
Jun 09 PHP
Thinkphp中import的几个用法详细介绍
Jul 02 PHP
php实现网页缓存的工具类分享
Jul 14 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
Sep 13 PHP
php版微信公众平台入门教程之开发者认证的方法
Sep 26 PHP
PHP 500报错的快速解决方法
Dec 14 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
May 04 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 PHP
Django 中 cookie的使用
Aug 17 PHP
PHP 8新特性简介
Aug 18 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 图片上添加透明度渐变的效果
2009/06/29 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
javascript 读取XML数据,在页面中展现、编辑、保存的实现
2009/10/27 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/06 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
JavaScript中的冒泡排序法
2016/08/03 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
Python中decorator使用实例
2015/04/14 Python
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
判断python字典中key是否存在的两种方法
2018/08/10 Python
对pandas处理json数据的方法详解
2019/02/08 Python
python pandas移动窗口函数rolling的用法
2020/02/29 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
pycharm配置安装autopep8自动规范代码的实现
2021/03/02 Python
德国家具在线:Fashion For Home
2017/03/11 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
体育教师个人的自我评价
2014/02/16 职场文书
工程管理英文求职信
2014/03/18 职场文书
小学生操行评语
2014/04/22 职场文书
党员志愿者活动方案
2014/08/28 职场文书
婚礼新人答谢词
2015/01/04 职场文书
2019年思想汇报
2019/06/20 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书
导游词之吉林花园山
2019/10/17 职场文书
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL