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动态变静态原理
Nov 25 PHP
很好用的PHP数据库类
May 27 PHP
php下保存远程图片到本地的办法
Aug 08 PHP
php 学习资料零碎东西
Dec 04 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 PHP
PHP中strtotime函数使用方法分享
Jan 10 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
Jul 12 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
Sep 16 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 PHP
Symfony页面的基本创建实例详解
Jan 26 PHP
PHP进阶学习之命名空间基本用法分析
Jun 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
escape unescape的php下的实现方法
2007/04/27 PHP
JavaScript作用域链使用介绍
2013/08/29 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
Ext GridPanel加载完数据后进行操作示例代码
2014/06/17 Javascript
js的延迟执行问题分析
2014/06/23 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
Angular 中 select指令用法详解
2016/09/29 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
2016/12/16 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
关于预加载InstantClick的问题解决方法
2017/09/12 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
[00:10]神之谴戒
2019/03/06 DOTA
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
python实现在线翻译
2020/06/18 Python
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
祖国在我心中的演讲稿
2014/05/04 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
特岗教师个人总结
2015/02/10 职场文书