## 關聯查詢
上一章中,我們已經了解到如何給模型定義關聯模型。關聯模型的定義,系統有進行處理直接定義成一個數組即可,不用像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官方關聯預載入](http://www.hmoore.net/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
- 安全