TP框架的关联模型的使用

来源:互联网 发布:adaboost算法流程图 编辑:程序博客网 时间:2024/05/16 09:23

关联模型的使用

在数据表中一般会存在三种关联关系:

通常我们所说的关联关系包括下面三种:

²  一对一关联  :ONE_TO_ONE,包括HAS_ONE

²  一对多关联  :ONE_TO_MANY,包括HAS_MANY 和 BELONGS_TO

²  多对多关联  :MANY_TO_MANY

现在有数据库

User(储存IDNAME)

Archive(储存每个人的详细信息),

Dept(个人所属的部门)

Grp(纯粹个人所属的项目组),

Money(个人使用的银行卡)

User_group(用于连接user表和Grp)

一对一指的是一条数据对应一条数据。例如,user表和Archive的关联关系。一个人对应一条详细信息

一对多(多对一):一条记录对应多条记录。例如:userDept的关联关系(多人对应一个部门),userMoney的关联关系(一个人对应多张银行卡)

多对多:多条记录对应多条记录。例如:usergrp的关联关系(每个人可以属于多个组,每个组有多个人)

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_typeHAS_MANYBLONGS_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带参数时,参数为要关联的关联名;

不带参数时代表输出所有关联模型