您的位置:首页 > 编程语言 > PHP开发

PHP如何定义表关联 hasOne 与 belongsTo

2016-04-21 11:23 309 查看
定义从属关联

HAS_ONE(或HAS_MANY):外键在子关联对象中

例子:

父关联对象表:

product_id

product_name

子关联对象表:

image_id

image_name

product_id

外键是:product_id

BELONGS_TO:外键在你父联对象中

父关联对象表:

product_id

class_id

product_name

子关联对象表:

class_id

class_name

外键是:class_id

eg:

$belongsTo

1、外键放置在主表中;

2、保存时不会自动更新关联表的记录;

3、删除时也不会更新关联表的记录。

示例:

多个文章都属于某一个栏目。

格式一:

* class Articles

* {

* var $belongsTo =array(

* array(

* ’tableClass’ =>‘Columns’,

* ’foreignKey’ =>‘column_id’,

* ’mappingName’=> ‘column’

* ),

* );

* }

在上面的格式中,foreignKey 表示在当前表中用什么字段存储对关联表的主键引用。

mappingName 表示在主表的返回结果中,以什么名字保存关联表的数据。

如果不提供 mappingName 参数,则假定使用 tableClass。

格式二:

* class Articles

* {

* var $belongsTo =‘Columns’;

* }

格式二是一种简化写法。foreignKey 字段名将和关联表的主键字段名相同。

============================

$hasMany

定义一对多关联

1、外键保存在关联表中;

2、保存时自动更新关联表的记录;

3、删除主表记录时自动删除关联记录。

示例:

每个用户(user)有多张订单 order。

格式一:

* class Users

* {

* var $hasMany =array(

* array(

* ’tableClass’ =>‘Orders’,

* ’foreignKey’ =>‘user_id’,

* ’mappingName’=> ‘orders’,

* ),

* );

* }

在一对多关系中,当前表并不包含对关联表的主键引用。

而是在关联表中保存对当前表的主键引用。

在上面的格式中,foreignKey 指示在关联表中用什么字段存储对当前表的主键引用。

mappingName 表示在主表的返回结果中,以什么名字保存关联表的数据。

如果不提供 mappingName 参数,则假定使用 tableClass。

格式二:

* class Users

* {

* var $hasMany =‘Orders’;

* }

简化写法中,foreignKey 字段名将和当前表的主键字段名相同。

============================

$hasOne

定义一对一关联

1、外键放置在关联表中;

2、保存时如果有关联对象,则自动创建或更新关联表的记录;

3、删除主表记录时自动删除关联记录。

示例:

当前表为 users,用于存储用户账户。而每个用户账户有且只有一个对应的个人信息(profile)记录。

格式一:

* class Users

* {

* var $hasOne =array(

* array(

* ’tableClass’ =>‘Profiles’,

* ’foreignKey’ =>‘profile_id’,

* ’mappingName’=> ‘profile’,

* ),

* );

* }

在上面的格式中,foreignKey 表示在关联表中用什么字段存储对主表的主键引用。 mappingName 表示在主表的返回结果中,以什么名字保存关联表的数据。 如果不提供 mappingName 参数,则假定使用 tableClass。

格式二:

* class Users

* {

* var $hasOne =‘Profiles’;

* }

格式二是一种简化写法。foreignKey 字段名将和主表的主键字段名名相同。

============================

$manyToMany

定义多对多关联

1、外键保存在中间表里面;

2、保存时自动更新中间表;

3、删除主表记录时自动删除中间表的相关记录。

示例:

每个成员(member)可以拥有多个角色(role),而每个角色也可以指定给多个成员。

格式一:

* class Members

* {

* var $manyToMany =array(

* array(

* ’tableClass’ =>‘Roles’,

* ’joinTable’ =>‘member_roles’,

* ’foreignKey’ =>‘member_id’,

* ’assocforeignKey’=> ‘role_id’,

* ’mappingName’ =>‘roles’,

* ),

* );

* }

在多对多关系中,当前表并不包含对关联表的主键引用。

而是在一个中间表里面保存对当前表和关联表的主键引用。

在上面的格式中,joinTable 表示中间表的名字。foreignKey 和

assocforeignKey 分别表示在中间表里面用什么字段存储对主表和

关联表主键字段的引用。

mappingName 表示在主表的返回结果中,以什么名字保存关联表的数据。

如果不提供 mappingName 参数,则假定使用tableClass。

格式二:

* class Members

* {

* var $manyToMany =‘Roles’;

* }

简化写法中,foreignKey 字段名将和当前表的主键字段名相同。

assocforeignKey字段名称则和关联数据表的主键字段名相同。

而中间表名称将用FLEA_Db_TableDataGateway::getMidtableName() 方法计算。

hasOne 是一对多关联,表示一条主表记录有一条对应的关联记录。

而 belongsTo 是从属关联,表示一条主表记录属于另一条关联记录。

hasOne 和 belongsTo 正好是相反的关系。

例如 “一个用户”有一个“个人空间”。那么一个“个人空间”就属于“一个用户”。

由于 hasOne 实际上是 hasMany (一对多)关联的一种特例,所以 belongsTo 和 hasMany 也是相反的关系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: