ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 关联模型 ##介绍 当然,您的数据库表很可能跟另一张表相关联。例如,一篇 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); ```