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 相关文章推荐
消息持续发送的完整例子
Oct 09 PHP
10个可以简化php开发过程的MySQL工具
Apr 11 PHP
PHP冒泡排序算法代码详细解读
Jul 17 PHP
超级实用的7个PHP代码片段分享
Jan 05 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
Aug 15 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
Sep 26 PHP
php猴子选大王问题解决方法
May 12 PHP
php准确获取文件MIME类型的方法
Jun 17 PHP
PHP超全局数组(Superglobals)介绍
Jul 01 PHP
PHP基于接口技术实现简单的多态应用完整实例
Apr 26 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
PHP的简单跳转提示的实现详解
Mar 14 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
使用Xdebug调试和优化PHP程序之[1]
2007/04/17 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
php计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
Add Formatted Text to a Word Document
2007/06/15 Javascript
javascript 显示当前系统时间代码
2009/12/28 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
js选项卡的实现方法
2015/02/09 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
js微信分享实现代码
2020/10/11 Javascript
Vue 过滤器filters及基本用法
2017/12/26 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
[01:03:37]Secret vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
python numpy元素的区间查找方法
2018/11/14 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
python 初始化一个定长的数组实例
2019/12/02 Python
Python综合应用名片管理系统案例详解
2020/01/03 Python
Python with标签使用方法解析
2020/01/17 Python
python文件编写好后如何实践
2020/07/07 Python
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
大客户销售经理职责
2013/12/04 职场文书
公积金单位接收函
2014/01/11 职场文书
《真想变成大大的荷叶》教学反思
2014/04/14 职场文书
维修工先进事迹
2014/05/29 职场文书
Windows server 2012 NTP时间同步的实现
2022/06/25 Servers
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技