关联模型的使用
在数据表中一般会存在三种关联关系:
通常我们所说的关联关系包括下面三种:
² 一对一关联 :ONE_TO_ONE,包括HAS_ONE
² 一对多关联 :ONE_TO_MANY,包括HAS_MANY 和 BELONGS_TO
² 多对多关联 :MANY_TO_MANY
现在有数据库
User(储存ID,NAME),
Archive(储存每个人的详细信息),
Dept(个人所属的部门),
Grp(纯粹个人所属的项目组),
Money(个人使用的银行卡)
User_group(用于连接user表和Grp表)
一对一指的是一条数据对应一条数据。例如,user表和Archive的关联关系。一个人对应一条详细信息
一对多(多对一):一条记录对应多条记录。例如:user和Dept的关联关系(多人对应一个部门),user和Money的关联关系(一个人对应多张银行卡)
多对多:多条记录对应多条记录。例如:user和grp的关联关系(每个人可以属于多个组,每个组有多个人)
在TP框架中使用关联模型:
首先要有一个自定义模型。要继承RelationModel类:
Class UserModel extends RelationModel
之后就要定义关联模型:创建类的属性:$_link=array()在$_link数组中应该包含每个在该模型中需要的关联关系,每一个关联关系都应该是一个数组,数组中储存关联关系的参数
关联模型的名称要和关联表的表名相同
例如:
protected $_link = array(
'Archives'=>array(
'mapping_type' =>HAS_ONE, //mapping_type:关联类型
//foreign_key:关联表的外键(这里是Archives表的user_id字段)
'foreign_key'=>'user_id'
)
);
多对一只要修改mapping_type为HAS_MANY或BLONGS_TO
多对多和一对一的区别是需要更多地参数:
'Grp'=>array(
'mapping_type'=>MANY_TO_MANY,
'relation_table'=>'user_group', //relation_table是中间约束和关联的表名
'foreign_key'=>'user_id', //此表类的对应中间表的外键
'relation_foreign_key'=>'group_id' //关联表的对应中间表的外键
)
在控制器中调用关联模型:
$model=D('User');
var_dump($model->relation('Archives')->find(1));
Relation带参数时,参数为要关联的关联名;
不带参数时代表输出所有关联模型