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图片上传类带图片显示
Nov 25 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
解析Linux下Varnish缓存的配置优化
Jun 20 PHP
mac下Apache + MySql + PHP搭建网站开发环境
Jun 02 PHP
php利用cookie实现自动登录的方法
Dec 10 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
Dec 24 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
PHP7常量数组用法分析
Sep 26 PHP
浅谈PHP中new self()和new static()的区别
Aug 11 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
Sep 01 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 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
PHP XML操作的各种方法解析(比较详细)
2010/06/17 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
PHP会话处理的10个函数
2015/08/11 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
详解PHP5.6.30与Apache2.4.x配置
2017/06/02 PHP
PHP 获取 ping 时间的实现方法
2017/09/29 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
java script编程起步(第三课)
2007/01/10 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
jquery实现表单验证简单实例演示
2015/11/23 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
2016/09/21 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
Python Requests 基础入门
2016/04/07 Python
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
python机器人行走步数问题的解决
2018/01/29 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
利用Python的folium包绘制城市道路图的实现示例
2020/08/24 Python
关于Python错误重试方法总结
2021/01/03 Python
HTML5中语义化 b 和 i 标签
2008/10/17 HTML / CSS
《庐山的云雾》教学反思
2014/04/22 职场文书
绿色环保演讲稿
2014/05/10 职场文书
幸福中国演讲稿
2014/09/12 职场文书
早读课迟到检讨书
2014/09/25 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
民事申诉状范本
2015/05/20 职场文书
学困生转化工作总结
2015/08/13 职场文书
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技