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 18 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
PHP生成唯一订单号的方法汇总
Apr 16 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
浅谈php+phpStorm+xdebug配置方法
Sep 17 PHP
php实现的单一入口应用程序实例分析
Sep 23 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
Dec 02 PHP
PHP实现电商订单自动确认收货redis队列
May 17 PHP
php注册审核重点解析(数据访问)
May 23 PHP
PHP如何实现订单的延时处理详解
Dec 30 PHP
PHP 对接美团大众点评团购券(门票)的开发步骤
Apr 03 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中获取时间的下一周下个月的方法
2014/03/18 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
Laravel中间件实现原理详解
2016/10/09 PHP
php 截取中英文混合字符串的方法
2018/05/31 PHP
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
JS简单实现登陆验证附效果图
2013/11/19 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
解决js ajax同步请求造成浏览器假死的问题
2018/01/18 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
vue项目引入ts步骤(小结)
2019/10/31 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
2020/05/10 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
2020/07/24 Javascript
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
Python函数式编程
2017/07/20 Python
微信跳一跳小游戏python脚本
2018/01/05 Python
django允许外部访问的实例讲解
2018/05/14 Python
python实现寻找最长回文子序列的方法
2018/06/02 Python
django Serializer序列化使用方法详解
2018/10/16 Python
python遍历小写英文字母的方法
2019/01/02 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
2019/08/26 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
韩国最大的购物网站:Gmarket
2019/06/20 全球购物
测控技术与仪器个人求职信范文
2013/12/30 职场文书
个人公开承诺书
2014/03/28 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
退伍军人感言
2015/08/01 职场文书
python+pytest接口自动化之token关联登录的实现
2022/04/06 Python
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL
在windows server 2012 r2中安装mysql的详细步骤
2022/07/23 Servers