thinkphp5.1嵌套关联预载入的写法
2019独角兽企业重金招聘Python工程师标准>>>
关于thinkphp5的嵌套关联预载入的写法,thinkphp5.1完全开发手册上写着:
也可以支持嵌套预载入,例如:
$list = User::with('profile.phone')->select([1,2,3]);
foreach($list as $user){// 获取用户关联的phone模型dump($user->profile->phone);
}
假如我自己的需求是查User 表id为5用户的用户名user.name以及关联的信息表的地址profile.address,信息表同时用id关联手机号表,同时要查出手机号状态phone.status,定义的关联如下
User模型
public function HasProfile(){
return $this->hasOne('Profile','user_id','id');
}
Profile
public function HasPhone(){
return $this->hasOne('Phone','id','phone_id');
}
我本以为是这样写查询
User::where('id',5)->field('id,name')->with(['HasProfile'=>function($query){
$query->field('user_id,id,address');
},'HasProfile.HasPhone'=>function($query){
$query->field('phone_id,status');
}])->find();
结果直接报错,而去掉
['HasProfile'=>function($query){
$query->field('user_id,id,address');
}
虽然有结果但把信息表所有字段查出来了,浪费了一些性能,我小小的一番思考后便知道了正确的写法
User::where('id',5)->field('id,name')->with(['HasProfile'=>function($query){
$query->field('user_id,id,address')->with(['HasPhone'=>function($query){
$query->field('phone_id,status');
}]);
}])->find();
以作记录
转载于:https://my.oschina.net/u/3470006/blog/3036220
thinkphp5.1嵌套关联预载入的写法相关推荐
- thinkphp5 关联预载入怎么用
最近有使用TP开发.对->with和->withJoin这样的关联预载入感到不解,现记录总结如下: 关联查询的预查询载入功能,解决了性能与查询的之间的最优化选择问题,主要解决了N+1次查询 ...
- thinkphp6.0模型篇之关联预载入
1.在普通的关联查询下,我们循环数据列表会执行n+1次sql查询 $list = UserModel::select([19, 20, 21]); foreach ($list as $user) { ...
- 小程序web-view嵌套关联公众号
小程序web-view嵌套关联公众号 <web-view src="访问路径"></web-view> 关于微信开发者工具本地调试及真机编译注意点 1.设置 ...
- Laravel5.2之模型关联预加载
2019独角兽企业重金招聘Python工程师标准>>> 说明:本文主要说明Laravel Eloquent的延迟预加载(Eager Loading),使用延迟预加载来减少MySQL查 ...
- GORM v2 关联预加载Preload和Joins的区别
前言 本文中使用到的数据表结构以及GORM版本的区分详见以下文章:GORM v2 一对一关联查询使用(Belongs To .Has One) 执行区别 调用gorm的Debug方法打印一下一对一关联 ...
- 关联查询的resultMap写法示例
对于自定义对象一般使用association,对于集合一般使用collection. 对于一般的自定义对象 1.使用子查询: <resultMap id="BaseResultMapW ...
- 模型训练:数据预处理和预载入
相对于模型的训练而言,有时候数据的预处理和载入反而是一件更为耗时的工作. 为了优化模型的训练流程,有必要对训练的全流程做一个时间上的评测(Profiling),以弄清每一步所耗费的时间,并发现性能上的 ...
- 瀑布流 ajax 预载入 json
pbl.json[模拟后台json数据]: [ { "id": "511895", "title": ...
- php join查询,thinkphp5模型join关联查询
class Space extends Model { public function meetingroom() { return $this->hasMany('meetingroom',' ...
最新文章
- 【PAT (Advanced Level) Practice】1037 Magic Coupon (25 分)
- 企业USB权限控制心得
- Linux networkmanager
- mysql 索引空间大小_查看数据库表中容量大小,表有多少记录,占多少空间以及索引的大小,以及未使用空间...
- mysql+存储器_mysql内存储器计算公式_mysql
- 学习Spring必学的Java基础知识(2)----动态代理
- iOS开发之字典(NSDictionary)和JSON字符串(NSString)之间互转
- 互斥量+条件变量实现 信号量
- 8051单片机的C语言程序设计
- Google APK下载
- android baseview,Android BaseAdapter:在getView()重新输入时conver...
- X509证书认证原理
- 微软宣布IE进入死亡倒计时 回顾IE传奇的一生
- hypermill五轴再加工_hypermill五轴加工特点详述
- 《Java并发编程的艺术》——Java并发的前置知识(笔记)
- EventBus简介与使用
- Tensorrt 7.2.3 转换yolov5 v3.0 pytorch1.8.1 onnx1.6.0
- html在线过滤器,过滤器-内置过滤器.html
- 管理类联考——英语——知识篇——考研英语熟词生义
- GitFlow 代码版本管理
热门文章
- SharePoint 2010中的客户端模型
- 动态规划4--最佳加法表达式
- 【初学者指南】在ASP.NET MVC 5中创建GridView
- Python pytagcloud 中文分词 生成标签云 系列(一)
- [Java] Hashcode的作用
- Powershell管理系列(八)Exchange 2013通讯组管理
- Leetcode | Binary Tree Maximum Path Sum
- linux下安装oracle 10g
- 引人遐想,用 Python 获取你想要的 “某个人” 摄像头照片
- 线程撕裂者安装linux,CPU-Z 1.90发布:初步支持三代线程撕裂者