文档章节

thinkphp5.1嵌套关联预载入的写法

gcudwork
 gcudwork
发布于 04/12 21:36
字数 333
阅读 38
收藏 2

关于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();

以作记录

© 著作权归作者所有

gcudwork
粉丝 0
博文 26
码字总数 11959
作品 0
武汉
程序员
私信 提问
ThinkPHP V5.0.12 暨 5.1.0 RC3 版本发布

V5.1.0版本是继5.0版本之后又一个重大版本,ThinkPHP5.1在5.0的基础上对底层架构做了进一步的改进,引入新特性,并提升版本要求。 ThinkPHP5.1运行环境要求PHP5.6+,虽然不支持5.0的无缝升级...

流年
2017/11/06
1K
15
ThinkPHP V5.0.5 版本发布 — 祝大家新春快乐!

ThinkPHP V5.0.5 版本发布,祝大家新春快乐,事业有成,“鸡”祥如意^_^ 官方快速入门系列教程新增了控制器从入门到精通 V5.0.5版本是年前最后一个发布版本,也是5.0系列版本的最后一个功能版...

流年
2017/01/23
2.2K
17
ThinkPHP/think-template

think-template 从ThinkPHP5.1独立出来的编译型模板引擎 主要特性 支持XML标签库和普通标签的混合定义; 支持直接使用PHP代码书写; 支持文件包含; 支持多级标签嵌套; 支持布局模板功能; ...

ThinkPHP
2017/11/02
0
0
ThinkPHP 5.1.38 LTS 版本发布,常规更新

本次更新为常规更新,主要增强了5.1版本的关联查询功能,以及一些优化和修正,主要包括: 主要更新 类增加方法 改进浮点型查询 修正关联查询关联外键为空的查询错误 远程一对多支持关联统计和...

流年
08/08
1K
12
QueryPHP V1-beta.6 新增 400 单元测试全量覆盖

QueryPHP v1.0.0-beta.6,这个版本主要进行单元测试收尾工作,新编写 400 例单元测试用例,除了我们选择主动忽略的、无法测试的代码和一部分 Swoole 的代码,整个产品实现百分之百覆盖。核心库...

doyouhaobaby
10/17
729
3

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
今天
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
今天
6
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
9
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
5
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部