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学习资料汇总与网址
Mar 16 PHP
php一些公用函数的集合
Mar 27 PHP
php下过滤html代码的函数 提高程序安全性
Mar 02 PHP
ThinkPHP在新浪SAE平台的部署实例
Oct 31 PHP
PHP内核探索之变量
Dec 22 PHP
PHP面向对象程序设计实例分析
Jan 26 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
Nov 25 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
Sep 16 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
Apr 06 PHP
PHP isset()及empty()用法区别详解
Aug 29 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
DedeCms模板安装/制作概述
2007/03/11 PHP
基于php缓存的详解
2013/05/15 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
PHP判断是否微信访问的方法示例
2019/03/27 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
2019/05/13 PHP
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
webpack 单独打包指定JS文件的方法
2018/02/22 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
Js图片点击切换轮播实现代码
2020/07/27 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
2021/02/25 Vue.js
Python的类实例属性访问规则探讨
2015/01/30 Python
python实现多线程网页下载器
2018/04/15 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
matplotlib.pyplot绘图显示控制方法
2019/01/15 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
2019/12/30 Python
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
劳动工资科岗位职责范本
2014/03/02 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
技术比武方案
2014/05/19 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
电台广播稿范文
2015/08/19 职场文书
Django中的JWT身份验证的实现
2021/05/07 Python