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
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
PHP spl_autoload_register实现自动加载研究
Dec 06 PHP
深入解析php之sphinx
May 15 PHP
ThinkPHP之A方法实例讲解
Jun 20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
Jun 23 PHP
ThinkPHP模板比较标签用法详解
Jun 30 PHP
php实现数组按指定KEY排序的方法
Mar 30 PHP
php文件读取方法实例分析
Jun 20 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
Jun 06 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
Oct 30 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
利用文件属性结合Session实现在线人数统计
2006/10/09 PHP
ThinkPHP自动验证失败的解决方法
2011/06/09 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
IE6下javasc#ipt:void(0) 无效的解决方法
2013/12/23 Javascript
使用原生js写的一个简单slider
2014/04/29 Javascript
jquery取子节点及当前节点属性值的方法
2014/09/09 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
jQuery实现转动随机数抽奖效果的方法
2015/05/21 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
JavaScript位移运算符(无符号) >>> 三个大于号 的使用方法详解
2016/03/31 Javascript
jQuery插件编写步骤详解
2016/06/03 Javascript
js窗口震动小程序分享
2016/11/28 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
2020/04/21 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
Node.js API详解之 util模块用法实例分析
2020/05/09 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
python pandas修改列属性的方法详解
2018/06/09 Python
python爬虫实例详解
2018/06/19 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
python实现网站微信登录的示例代码
2019/09/18 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
医院实习接收函
2014/01/12 职场文书
工程开工庆典邀请函
2014/02/01 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
MySQL的join buffer原理
2021/04/29 MySQL
MySQL Server层四个日志的实现
2022/03/31 MySQL