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 相关文章推荐
在Zeus Web Server中安装PHP语言支持
Oct 09 PHP
PHP 增加了对 .ZIP 文件的读取功能
Oct 09 PHP
php smarty的预保留变量总结
Dec 04 PHP
php中如何防止表单的重复提交
Aug 02 PHP
php 判断字符串中是否包含html标签
Feb 17 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
php+ajax实现无刷新的新闻留言系统
Dec 21 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
Sep 02 PHP
PHP实现ASCII码与字符串相互转换的方法
Apr 29 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
PHP实现微信商户支付企业付款到零钱功能
Sep 30 PHP
PHP去除空数组且数组键名重置的讲解
Feb 28 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 MVC模式在网站架构中的实现分析
2010/03/04 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
php之可变函数的实例详解
2017/09/13 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
2018/05/23 PHP
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
jQuery实现单行文字间歇向上滚动源代码
2013/06/02 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
60行js代码实现俄罗斯方块
2015/03/31 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
2015/12/18 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
Vue自定义指令写法与个人理解
2019/02/09 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
Python转换HTML到Text纯文本的方法
2015/01/15 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
Python基础知识点 初识Python.md
2019/05/14 Python
Django 查询数据库并返回页面的例子
2019/08/12 Python
简单的Python调度器Schedule详解
2019/08/30 Python
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
纽约通行卡:The New York Pass(免费游览纽约90多个景点)
2017/07/29 全球购物
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
英国手机壳购买网站:Case Hut
2019/04/11 全球购物
父亲八十大寿答谢词
2014/01/23 职场文书
军训自我鉴定范文
2014/02/13 职场文书
入党积极分子对十八届四中全会期盼的思想汇报
2014/10/17 职场文书
工作表扬信范文
2015/01/17 职场文书
童年读书笔记
2015/06/26 职场文书
大学副班长竞选稿
2015/11/21 职场文书
基于flask实现五子棋小游戏
2021/05/25 Python