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 03 PHP
php 团购折扣计算公式
Nov 24 PHP
PHP中使用crypt()实现用户身份验证的代码
Sep 05 PHP
关于PHP语言构造器介绍
Jul 08 PHP
PHP闭包函数传参及使用外部变量的方法
Mar 15 PHP
微信公众平台DEMO(PHP)
May 04 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
Jan 12 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 PHP
php数组指针函数功能及用法示例
Feb 11 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
Dec 01 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 模拟登陆MSN并获得用户信息
2009/05/16 PHP
php解析url的三个示例
2014/01/20 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
JS实现div内部的文字或图片自动循环滚动代码
2013/04/19 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
基于python实现微信模板消息
2015/12/21 Python
python使用筛选法计算小于给定数字的所有素数
2018/03/19 Python
PyCharm+Miniconda3安装配置教程详解
2021/02/16 Python
解决TensorFlow训练模型及保存数量限制的问题
2021/03/03 Python
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
法国二手手袋、手表和奢侈珠宝购物网站:Collector Square
2018/07/05 全球购物
英国亚马逊官方网站:Amazon.co.uk
2019/08/09 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
英语专业学生的自我评价
2013/12/30 职场文书
学校火灾防控方案
2014/06/09 职场文书
法院反腐倡廉心得体会
2014/09/09 职场文书
医院护士见习期自我鉴定
2014/09/15 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
2014年标准化工作总结
2014/12/17 职场文书
离婚案件答辩状
2015/05/22 职场文书
运动会报道稿大全
2015/07/23 职场文书
学校教代会开幕词
2016/03/04 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang
python在package下继续嵌套一个package
2022/04/14 Python