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 也是相反的关系。
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 也是相反的关系。
相关文章推荐
- php设计模式 单例模式
- php设计模式 策略模式。
- php如何获取error log
- ThinkPHP问题收集:模板中使用U方法时无法嵌套大括号,For标签,插入数据,新增的表字段缓存问题
- php 异常获取
- php socket function
- php trait特性
- php匿名函数
- php 项目bug 快速定位
- php上传文件遇到的坑
- Laravel框架写的网站直接放在wampserver环境下路径错误问题
- php生成器
- php代码优化
- PHP自动登录
- 一个不错的php类库
- PHP里10个鲜为人知但却非常有用的函数
- json如何用php格式化输出
- PHP实现多进程并行执行脚本
- PHP 高并发、抢票、秒杀 解决方案
- [分享]Ubuntu安装配置FTP服务器--pure-ftp