关联模型可以操作多种 关联表的 增、删、改、查。
一.模型简介
关联模型,有三种模式。
一对一:ONE_TO_ONE,包括 HAS_ONE 和 BELONGS_TO;
一对多:ONE_TO_MANY,包括 HAS_MANY 和 BELONGS_TO;
多对多:MANY_TO_MANY。
一对一:用户表和身份证表,一个用户只能对应一个身份证,而一个身份证只能对应一 个用户。这就是一对一。
一对多:用户表和留言表:一个用户可以发表 N 条留言,而每条留言只能由某一个用户 发表。这就是一对多
多对多:用户表和角色表:一个用户可以是认证专员,同时也是审核专员
添加数据表think_card
我的表结构可能出错了 但不影响;
用户显示身份证
//User 控制器部分
namespace Home\Controller;
use Think\Controller;
use Home\Model\UserModel;
class UserController extends Controller {
public function index() { $user = D('User');
$arr = $user->relation('card')->select();
var_dump($arr);
}
}
//访问可以得到所以user数据
//UserModel.class.php
namespace Home\Model;
use Think\Model;
use Think\Model\RelationModel; //关联模型
class UserModel extends RelationModel {
protected $_link = array(
'Card'=>array(
'mapping_type'=>self:: HAS_ONE ,
// 'class_name'=>'Card',
//'mapping_name'=>'card',
'foreign_key'=>'uid',
'mapping_fields'=>'code',
'as_fields'=>'code',
//'condition'=>'id=1',
),
);
}
身份证显示用户
建立CardController.class.php //与user控制平级
//Card控制器部
namespace Home\Controller;
use Think\Controller;
use Home\Model\CardModel;
class CardController extends Controller {
public function index() {
$card = D('Card');
$arr = $card->relation(true)->select();
var_dump($arr);
}
}
创建模型CardModel.class.php
namespace Home\Model;
use Think\Model; use Think\Model\RelationModel; //继承
class CardModel extends RelationModel {
protected $_link = array(
'User'=>array( 'mapping_type'=>self::BELONGS_TO,
'foreign_key'=>'uid',
'mapping_fields'=>'user',
'as_fields'=>'user',
),
);
}
用户表对留言表 (1对多)
创建表contert
表的结构 `think_content`
--
CREATE TABLE IF NOT EXISTS `think_content` (
`id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
`content` text,
`uid` smallint(6) unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
--
-- 转存表中的数据 `think_content`
--
INSERT INTO `think_content` (`id`, `content`, `uid`) VALUES
(1, '我的第一条留言', 1),
(2, '我的第二条留言', 1),
(3, '我的第三条留言', 1);
--
UserControler.class.php
namespace Home\Controller;
use Think\Controller;
use Home\Model\UserModel;
class UserController extends Controller {
public function index() { $user = D('User');
$arr = $user->relation(tuer)->select();
print_r($arr);
}
}
UserModel.class.php
namespace Home\Model;
use Think\Model;
use Think\Model\RelationModel; //关联模型
class UserModel extends RelationModel {
protected $_link = array(
'Content' => array(
'mapping_type'=>self::HAS_MANY,
'foreign_key'=>'uid',
'class_name'=>'Content',
'mapping_name'=>'contents',
'mapping_fields'=>'content',//只显示content
'mapping_limit'=>'0,2',//只显示两条
'mapping_order'=>'id DESC',//倒序显示两条
),
);
}
反过来 n条留言从属一个用户:
ContentController.class.php
relation(true)->select();
print_r($arr);
}
}
ContentModel.class.php
array(
'mapping_type'=>self::BELONGS_TO,
'foreign_key'=>'uid',
'mapping_fields'=>'user',
'as_fields'=>'user',
),
);
}
用户表 user和角色表role 、中间表group 实现关联 : MANY__TO__MANY
- 表的结构 `think_group`
--
CREATE TABLE IF NOT EXISTS `think_group` (
`uid` smallint(6) unsigned DEFAULT NULL,
`gid` smallint(6) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- 转存表中的数据 `think_group`
--
INSERT INTO `think_group` (`uid`, `gid`) VALUES
(1, 1),
(1, 2),
(1, 3),
(2, 2),
(2, 3),
(3, 3);
-- --------------------------------------------------------
--
-- 表的结构 `think_role`
--
CREATE TABLE IF NOT EXISTS `think_role` (
`id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
--
-- 转存表中的数据 `think_role`
--
INSERT INTO `think_role` (`id`, `title`) VALUES
(1, '管理员'),
(2, '认证专员'),
(3, '审核专员');
-- ---
UserControler.class.php
namespace Home\Controller;
use Think\Controller;
use Home\Model\UserModel;
class UserController extends Controller {
public function index() { $user = D('User');
$arr = $user->relation(tuer)->select();
print_r($arr);
}
}
UserModel.class.php
array(
'mapping_type'=>self:: MANY_TO_MANY ,
'foreign_key'=>'uid', //中间表关联id
'relation_foreign_key'=>'gid',//关联角色表gid
'relation_table'=>'think_group',//中间表
),
);
}
之后可以进行表与表之间的管理 更新 添加 删除。
UserController.class.php
relation(true)->select();
print_r($arr);
}
public function add(){
//新增一个用户,同时增加一个身份证
$user = D('User');
$data['user'] = '5555';
$data['email'] = '[email protected]';
$data['Card'] = array( 'code' => '123456', );
$user->relation(true)->add($data);
}
//删除一个用户,同时删除关联的身份证
public function delete(){
$user = D('User');
$user->relation(true)->delete(9
);
}
//更新一个用户,同时更新对应的身份证
public function save() {
$user = D('User');
$data['user'] = '789';
$data['email'] = '[email protected]';
$data['Card'] = array( 'code'=>'6666666', );
$user->relation(true)->where(array('id'=>10))->save($data);
}