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嵌套关联预载入的写法相关推荐

  1. thinkphp5 关联预载入怎么用

    最近有使用TP开发.对->with和->withJoin这样的关联预载入感到不解,现记录总结如下: 关联查询的预查询载入功能,解决了性能与查询的之间的最优化选择问题,主要解决了N+1次查询 ...

  2. thinkphp6.0模型篇之关联预载入

    1.在普通的关联查询下,我们循环数据列表会执行n+1次sql查询 $list = UserModel::select([19, 20, 21]); foreach ($list as $user) { ...

  3. 小程序web-view嵌套关联公众号

    小程序web-view嵌套关联公众号 <web-view src="访问路径"></web-view> 关于微信开发者工具本地调试及真机编译注意点 1.设置 ...

  4. Laravel5.2之模型关联预加载

    2019独角兽企业重金招聘Python工程师标准>>> 说明:本文主要说明Laravel Eloquent的延迟预加载(Eager Loading),使用延迟预加载来减少MySQL查 ...

  5. GORM v2 关联预加载Preload和Joins的区别

    前言 本文中使用到的数据表结构以及GORM版本的区分详见以下文章:GORM v2 一对一关联查询使用(Belongs To .Has One) 执行区别 调用gorm的Debug方法打印一下一对一关联 ...

  6. 关联查询的resultMap写法示例

    对于自定义对象一般使用association,对于集合一般使用collection. 对于一般的自定义对象 1.使用子查询: <resultMap id="BaseResultMapW ...

  7. 模型训练:数据预处理和预载入

    相对于模型的训练而言,有时候数据的预处理和载入反而是一件更为耗时的工作. 为了优化模型的训练流程,有必要对训练的全流程做一个时间上的评测(Profiling),以弄清每一步所耗费的时间,并发现性能上的 ...

  8. 瀑布流 ajax 预载入 json

    pbl.json[模拟后台json数据]: [     {         "id": "511895",         "title": ...

  9. php join查询,thinkphp5模型join关联查询

    class Space extends Model { public function meetingroom() { return $this->hasMany('meetingroom',' ...

最新文章

  1. 【PAT (Advanced Level) Practice】1037 Magic Coupon (25 分)
  2. 企业USB权限控制心得
  3. Linux networkmanager
  4. mysql 索引空间大小_查看数据库表中容量大小,表有多少记录,占多少空间以及索引的大小,以及未使用空间...
  5. mysql+存储器_mysql内存储器计算公式_mysql
  6. 学习Spring必学的Java基础知识(2)----动态代理
  7. iOS开发之字典(NSDictionary)和JSON字符串(NSString)之间互转
  8. 互斥量+条件变量实现 信号量
  9. 8051单片机的C语言程序设计
  10. Google APK下载
  11. android baseview,Android BaseAdapter:在getView()重新输入时conver...
  12. X509证书认证原理
  13. 微软宣布IE进入死亡倒计时 回顾IE传奇的一生
  14. hypermill五轴再加工_hypermill五轴加工特点详述
  15. 《Java并发编程的艺术》——Java并发的前置知识(笔记)
  16. EventBus简介与使用
  17. Tensorrt 7.2.3 转换yolov5 v3.0 pytorch1.8.1 onnx1.6.0
  18. html在线过滤器,过滤器-内置过滤器.html
  19. 管理类联考——英语——知识篇——考研英语熟词生义
  20. GitFlow 代码版本管理

热门文章

  1. SharePoint 2010中的客户端模型
  2. 动态规划4--最佳加法表达式
  3. 【初学者指南】在ASP.NET MVC 5中创建GridView
  4. Python pytagcloud 中文分词 生成标签云 系列(一)
  5. [Java] Hashcode的作用
  6. Powershell管理系列(八)Exchange 2013通讯组管理
  7. Leetcode | Binary Tree Maximum Path Sum
  8. linux下安装oracle 10g
  9. 引人遐想,用 Python 获取你想要的 “某个人” 摄像头照片
  10. 线程撕裂者安装linux,CPU-Z 1.90发布:初步支持三代线程撕裂者