# 关联模型
##介绍
当然,您的数据库表很可能跟另一张表相关联。例如,一篇 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 命令