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 cookis创建实现代码
Mar 16 PHP
php学习之流程控制实现代码
Jun 09 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
Jun 07 PHP
解析php中static,const与define的使用区别
Jun 18 PHP
浅析php与数据库代码开发规范
Aug 08 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
Sep 23 PHP
php编译安装php-amq扩展简明教程
Jun 25 PHP
php连接微软MSSQL(sql server)完全攻略
Nov 27 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
CodeIgniter框架验证码类库文件与用法示例
Mar 18 PHP
PHP实现的简单在线计算器功能示例
Aug 02 PHP
php封装单文件上传到数据库(路径)
Oct 15 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跨站刷票的实现代码
2013/06/18 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
使用XHGui来测试PHP性能的教程
2015/07/03 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
jQuery插件Validate实现自定义表单验证
2016/01/18 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
node.js express中app.param的用法详解
2017/07/16 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
EJB面试题
2015/07/28 面试题
自考生毕业自我鉴定
2013/10/10 职场文书
国际贸易专业个人求职信格式
2014/02/02 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
辩论赛新闻稿
2015/07/17 职场文书
《分数乘法》教学反思
2016/02/24 职场文书
商业计划书范文
2019/04/24 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python
关于的python五子棋的算法
2022/05/02 Python
2022年显卡天梯图(6月更新)
2022/06/17 数码科技