thinkPHP3.2.3 关联模型 - 一对一关联
官方手册地址:http://document.thinkphp.cn/manual_3_2.html#relation_model
关联模型示例 - 一对一关联
HAS_ONE:当前模型拥有一个子对象
(例:一个员工对应一个员工档案)
1.创建数据表
#用户表 CREATE TABLE `think_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户表ID', `account` varchar(50) NOT NULL COMMENT '账户', `password` varchar(150) NOT NULL COMMENT '密码', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; #档案表 CREATE TABLE `think_profile` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '人事档案ID', `user_id` int(11) DEFAULT NULL COMMENT '用户表ID', `nickname` varchar(80) DEFAULT NULL COMMENT '昵称', `email` varchar(50) DEFAULT NULL COMMENT '电子邮箱', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
2. 创建用户控制器(/Application/Home/Controller)
<?php namespace Home\Controller; use Think\Controller; class UserController extends Controller { // 关联模型查询数据 public function relationModelQuery(){ $id = I('id/d'); $condition = 1; if($id > 0) $condition = "id=$id"; $user = D("User"); $result = $user-> relation(true)->where($condition)->select(); echo '<pre>';var_dump($result);exit; } // 关联模型新增数据 public function relationModelAdd(){ // 组装数据 方便验证 $data = array(); $data['account'] = I('account/s'); $data['password'] = I('password/s'); $data['email'] = I('email/s'); $data['nickname'] = I('nickname/s'); // 档案表数据 $data["Profile"] = array( 'email' => $data['email'], 'nickname' => $data['nickname'] ); // 实例化模型并验证数据 $user = D("User"); if(!$user->create($data)) exit($user->getError()); // 移除用户表多余数据 unset($data['email']); unset($data['nickname']); // 数据通过模型插入到数据库表中 $result = $user->relation(true)->add($data); if(!$result) exit('新增数据失败!'); exit('新增数据成功! ID:' . $result); } // 关联模型更新数据 public function relationModelSave(){ // 获取修改数据 $id = I('id/d'); $account = I('account/s'); $password = I('password/s'); $email = I('email/s'); $nickname = I('nickname/s'); if($id <= 0) exit('ID 不存在'); // 拼装需要更改的数据 $data = array(); if(strlen($account) > 0) $data['account'] = $account; if(strlen($password) > 0) $data['password'] = $password; if(strlen($email) > 0) $data['Profile']['email'] = $email; if(strlen($nickname) > 0) $data['Profile']['nickname'] = $nickname; // 实例化模型并通过关联模型更新数据 $user = D("User"); $result = $user-> relation(true)->where(array('id'=>$id))->save($data); if(!$result) exit('更新失败!'); exit('更新成功!影响行数:' . $result); } // 关联模型删除数据 public function relationModelDel(){ $id = I('id/d'); if($id <= 0) exit('ID 不存在'); $user = D("User"); $result = $user->relation(true)->delete($id); if(!$result) exit('删除失败!'); exit('删除成功!'); } }
3. 创建用户模型(/Application/Home/Model)
<?php namespace Home\Model; use Think\Model\RelationModel; class UserModel extends RelationModel{ // 指定用户表 protected $tableName = 'user'; // 数据验证 protected $_validate = array( //array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]), array('account', 'require', '账户不能为空!', '', '', 1), // 必填验证 array('account', '', '帐号名称已经存在!', 0, 'unique', 1), // 唯一验证 array('password', 'require','密码不能为空!', '', '', 1), // 必填验证 array('email', 'email', 'email 格式错误', '', '', 1), // 邮箱验证 array('nickname', 'require', '昵称不能为空!', '', '', 1), // 必填验证 ); // 关联模型 protected $_link = array( // 一对一 关联档案表 // HAS_ONE关联表示当前模型拥有一个子对象 'Profile'=>array( 'mapping_type' => self::HAS_ONE, 'class_name' => 'Profile', // 定义更多的关联属性 'foreign_key' => 'user_id', // 关联的外键名称 'as_fields' => 'email,nickname', // 字符串中间不要有空格 例:'email, nickname' 这样是错误的 ), ); }
4. 创建用户数据
访问 域名/home/user/relationModelAdd/account/zhangsan/password/123456/email/zhangsan@163.com/nickname/张三
访问 域名/home/user/relationModelAdd/account/lisi/password/555555/email/lisi@163.com/nickname/李四
访问 域名/home/user/relationModelAdd/account/wangwu/password/666666/email/wangwu@163.com/nickname/王五
访问 域名/home/user/relationModelAdd/account/zhaoliu/password/333333/email/zhaoliu@163.com/nickname/赵六
查看数据已同时新增到两个表中

5. 更新数据
修改用户表ID为 2 的数据,password 字段值改为:888888;同时更新 档案表对应 nickname 字段值改为:李四宝
访问 域名/home/user/relationModelSave/id/2/password/888888/nickname/李四宝

修改用户表ID为 3 的数据, account 改为:wanghua;同时更新 档案表对应 nickname 为:王华,email 字段更改为:wanghua@qq.com
访问 域名/home/user/relationModelSave/id/3/account/wanghua/email/wanghua@qq.com/nickname/王华

6. 查询数据
查询用户表ID 为 4 的数据
访问 /home/user/relationModelQuery/id/4

查询全部
访问 域名/home/user/relationModelQuery

7. 删除数据
删除用户表 id 为 1 的数据
访问 域名/home/user/relationModelDel/id/1
(完)
thinkPHP 3.2.3 关联模型 - 一对一 (https://www.cnblogs.com/koreyoshi/articles/11758080.html)
thinkPHP 3.2.3 关联模型 - 一对多 (https://www.cnblogs.com/koreyoshi/articles/11759851.html)
thinkPHP 3.2.3 关联模型 - 多对多 (https://www.cnblogs.com/koreyoshi/articles/11760159.html)

浙公网安备 33010602011771号