## 关联查询
上一章中,我们已经了解到如何给模型定义关联模型。关联模型的定义,系统有进行处理直接定义成一个数组即可,不用像TP那样定义function。
**但关联查询的方式却和TP一样,没有任何变化。**
先来看下User模型,关联模型的定义:
~~~
public $relationLink = [
//用户组
'UserGroup' => 'belongsTo',
//用户信息
'Member' => [
'type' => 'hasOne',
'deleteWith' => true
]
];
~~~
~~~
$user = model('User')->find();//查询一个用户,返回对象
$user->UserGroup;//$user 对象去获取关联模型UserGroup的数据
pr($user->toArray());//返回数组查询结果
//来看下查询结果
Array
(
[id] => 1
[username] => eduask
[password] => fa2112ee0dae88999a28f19b6a501aa8
[user_group_id] => 1
[status] => verified
[email] =>
[logined_ip] => 127.0.0.1
[logined] => 2017-11-11 17:37:33
[created] => 2017-10-10 11:22:25
[UserGroup] => Array
(
[id] => 1
[is_admin] => 1
[title] => 后台管理员
[alias] => Admin
)
)
~~~
~~~
$users = model('User')->select()->toArray;##查询多个用户,返回一个数组,每个数组元素是一个用户对象
pr($users);
~~~
所以关联查询的用法和TP本身是一致的。
* * * * *
## 关联预载入
关联预载入的用法和TP本事是一致的 → [TP官方关联预载入](https://www.kancloud.cn/manual/thinkphp6_0/1037605)
~~~
$list = model('User')->withUserGroup')->select();
pr($list);
pr($list->toArray());
~~~
使用关联预载入更方便、效率更高。
* * * * *
在系统中,关联预载入还支持where、field、order、limit(查询时那些关联操作)等复杂定义,但前提需要将你定义的关联先交给模型方法`parseWith`处理:
~~~
//定义复杂的预载入数组,支持where、filed、limit、order等常用的连贯操作 以关联模型名 => 数组定义
$with = [
'Member' => [
'field' => ['id','nickname']
],
'UserGroup' => [
'where' => ['id' => ['egt', 1]],
'field' => ['id','title'],
'limit' => 2,
'order' => ['id' => 'DESC']
]
];
//如果你的with不是第一个连贯操作,那么像上面这样定义的数组必须先交给parseWith处理
$with = model('User')->parseWith($with);
$list = model('User')->with($with)->select();
pr($list->toArray());
~~~
打印看下SQL语句,里面有你定义的内容:
~~~
[ SQL ] SELECT `id`,`nickname`,`user_id` FROM `eduask_member` WHERE `user_id` IN (1,2,3) [ RunTime:0.000000s ]
[ SQL ] SELECT `id`,`title` FROM `eduask_user_group` WHERE ( `id` >= 1 AND `id` IN (1,3) ) ORDER BY `id` DESC LIMIT 2 [ RunTime:0.000000s ]
~~~
- 2.0开发手册
- 基础
- 简介
- 安装
- 目录
- 规范(必看)
- 快速开发
- 创建模型
- 字段管理
- 无限级开发
- 模型Model
- 定义
- 方法
- 事件
- 关联
- 关联查询
- 验证
- 后台控制器Controller
- 定义
- 列表【index】
- 新增【create】
- 修改【modify】
- 删除【delete】
- 详细【detail】
- 文本审核【antispam】
- 清空数据【clearData】
- 自定义页面
- 视图View
- 视图使用
- 引入CSS和JS
- 基础表单构建Form
- 布局表单构建FormPage
- 表单构建器的基础使用
- 表单项
- 表单分组
- 表单触发器
- 表单布局
- 数据提交验证和入库
- 集成tinymce编辑器
- 集成nkeditor编辑器
- 表格构建Table
- 表格构建器基础使用
- 表格构建器列表字段相关
- 自定义列表头部工具按钮
- 自定义列表项工具按钮
- 自定义搜索
- 定义列表侧边栏
- 静态数据
- 更多属性和回调
- 自定义模板V2.1.0
- 列表统计输出V2.1.2
- 常见问题
- 自定义应用
- 创建新应用
- 应用开发
- API应用
- 自定义插件
- 创建新插件
- 杂项
- 认证Auth
- 权限管理
- 上传Upload
- 批量导入
- 助手库
- 系统配置
- 字典
- 二维码生成
- 源码修改
- 常见问题
- 小技巧,小细节
- 插件
- oauth
- APP一键登录
- 微信小程序登录
- 2.0CMS建站
- 基础
- 安装
- 建站
- Callback
- 引入CSS和JS
- 模板
- 栏目数据
- 列表页数据
- 详细页数据
- 栏目封面
- 自定义表单
- 其他数据和自定义数据
- wap视图层
- 前台搜索
- API开发
- CMS应用日志
- CMS升级指导
- 中台-SAAS开发
- 安装
- 中台日志
- 中台升级指导
- ★★2.0视频教程★★
- 附录
- Admin核心更新日志
- Admin核心升级指导
- composer
- 安全