# 關聯模型
##介紹
當然,您的數據庫表很可能跟另一張表相關聯。例如,一篇 blog 文章可能有很多評論,或是一張訂單跟下單客戶相關聯。 Model 讓管理和處理這些關聯變得很容易。
##操作
###演示數據表
```
# 欄目表
# ------------------------------------------------------------
DROP TABLE IF EXISTS `category`;
CREATE TABLE `category` (
`cid` int(11) unsigned NOT NULL AUTO_INCREMENT,
`cname` char(100) DEFAULT NULL COMMENT '欄目名',
PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `category` (`cid`, `cname`)
VALUES
(1,'學校'),
(2,'科技');
# 新聞表
# ------------------------------------------------------------
DROP TABLE IF EXISTS `news`;
CREATE TABLE `news` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(100) DEFAULT NULL COMMENT '標題',
`uid` int(11) DEFAULT NULL COMMENT '用戶uid',
`cid` int(11) DEFAULT NULL COMMENT '欄目cid',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `news` (`id`, `title`, `uid`, `cid`)
VALUES
(1,'后盾網HDPHP發布了。。。',1,1),
(2,'百度發布手機了',2,2);
# 角色表
# ------------------------------------------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
`rid` int(11) unsigned NOT NULL AUTO_INCREMENT,
`rname` char(30) DEFAULT NULL COMMENT '角色名',
PRIMARY KEY (`rid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `role` (`rid`, `rname`)
VALUES
(1,'管理員'),
(2,'編輯');
# 用戶表
# ------------------------------------------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`uid` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` char(30) DEFAULT NULL COMMENT '用戶名',
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `user` (`uid`, `username`)
VALUES
(1,'向軍'),
(2,'小魚');
# 用戶信息表
# ------------------------------------------------------------
DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`address` varchar(200) DEFAULT NULL COMMENT '地址',
`uid` int(11) DEFAULT NULL COMMENT '用戶uid',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `user_info` (`id`, `address`, `uid`)
VALUES
(1,'北京市朝陽區',1),
(2,'海定區',2);
# 用戶角色表
# ------------------------------------------------------------
DROP TABLE IF EXISTS `user_role`;
CREATE TABLE `user_role` (
`uid` int(11) DEFAULT NULL COMMENT '用戶uid',
`rid` int(11) DEFAULT NULL COMMENT '角色rid'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
LOCK TABLES `user_role` WRITE;
INSERT INTO `user_role` (`uid`, `rid`)
VALUES
(1,1),
(2,2);
```
###表關系說明
**HAS_ONE**
用戶表只有一條信息在用戶信息表中,用戶表 HAS_ONE 用戶信息表
**HAS_MANY**
欄目表有多條信息在新聞表中,欄目表 HAS_MANY 新聞表
**BELONGS_TO**
欄目表有多條信息在新聞表中,新聞表 BELONGS_TO 欄目表
**MANY_TO _MANY**
會員表與角色表是多對多關聯 會員表 MANY_TO_MANY 角色表
##操作
**定義模型**
```
<?php namespace Home\Model;
use Hdphp\Model\RelationModel;
class User extends RelationModel
{
public $table = 'user';
public $relation = array(
'user_info' => array(// 關聯表
'type' => BELONGS_TO, // 包含一條主表記錄
'foreign_key' => 'uid', //user_info 關聯字段
'parent_key' => 'uid', //user 主鍵
),
'role' => array(// 關聯表
'type' => MANY_TO_MANY, // 多對多關系
'relation_table' => 'user_role', // 中間表
'foreign_key' => 'rid',//role表主鍵
'parent_key' => 'uid',//user表主鍵
)
);
}
```
```
<?php namespace home\model;
use hdphp\model\RelationModel;
class News extends RelationModel
{
public $table = 'news';
public $relation = array(
'category' => array(// 關聯表
'type' => HAS_MANY, //category 包含多條news 表數據
'parent_key' => 'cid', // 欄目表主鍵
'foreign_key' => 'cid', // 文章表主鍵
)
);
}
```
**操作**
定義好模型后,增、刪、改、查操作與平常使用一樣,只是系統會自動按關聯規則處理關聯表信息。
```
$user =new User;
$result = $user->all();
p($result);
```
- 基礎
- 框架特性
- 開發規范
- 許可協議
- 安裝
- 偽靜態
- 作者
- 更新日志
- 架構
- 入口文件
- 目錄結構
- 系統常量
- 自動加載
- 應用目錄
- 配置
- 設置配置
- 檢測配置
- 獲取配置
- 配置文件
- 擴展配置
- c 函數
- 函數
- 工具函數
- 控制器
- 定義
- 空方法
- 基本訪問
- 路由
- 基礎路由
- 控制器路由
- 路由參數
- 參數檢測
- 分組路由
- RESTful
- 數據庫
- 配置
- 核心操作
- 查詢構造器
- 表操作
- 事務處理
- 函數
- 查詢日志
- 模型
- 定義模型
- 模型動作
- 構建數據
- 模型驗證
- 自動完成
- 自動過濾
- 字段映射
- 表單令牌
- 字段保護
- 視圖模型
- 關聯模型
- 魔術方法
- 視圖
- 模板配置
- 模板文件
- 分配數據
- 請求響應
- 系統標簽
- 擴展標簽
- 緩存模板
- 模板繼承
- 中間件與鉤子
- 中間件
- 鉤子
- 緩存
- 基礎
- Mysql緩存
- 文件緩存
- 調試
- Trace
- 日志
- 調試模式
- 服務
- 介紹
- 創建服務
- 系統服務
- 自動完成
- 壓縮&解壓
- 自動驗證
- 上傳
- 字符串
- 響應
- 請求數據
- RBAC
- QQ整合登錄
- 分頁
- 郵件
- 語言
- 圖像
- 生成靜態
- 目錄操作
- 數據處理
- curl
- 加密
- Cookie
- 驗證碼
- 購物車
- 備份
- 數組
- 支付寶
- xml
- 工具
- 云接口
- 前端組件
- 基本配置
- 列表框日期選擇
- CSS 樣式
- URL操作
- 數據驗證
- 城市選擇
- JSON處理
- 幻燈片
- checkbox滑動樣式
- 消息框
- md5
- 模態框
- 上傳表單樣式
- 選擇字體
- 剪貼板
- 上傳圖片
- 上傳文件
- 拾色器 spectrum
- 列表框 select2
- 百度地圖
- 二維碼生成
- 表單提交
- 時間管理 moment
- 加載動畫
- 百度編輯器
- Cookie操作
- 圖標庫 font-awesome
- emotion表情
- domReady
- 日期 datetimepicker
- 日期區間列表 daterangepicker
- 日期區間 daterangepicker
- 時間 clockpicker
- 圖表
- 光標控制 caret
- 表單驗證 bootstrapValidator
- 微信
- 配置項
- 綁定開發者
- 獲取access_token
- 網頁授權獲取用戶基本信息
- 微信支付
- 微信紅包
- 用戶管理
- 二維碼
- 回復消息
- 消息管理
- 素材管理
- 會員組管理
- 事件管理
- 消息群發
- 客服
- 自定義菜單
- 菜單管理
- 菜單事件
- 附錄
- 升級環境
- HTTP 狀態碼
- GIT 命令