think php 关联模型,ThinkPHP 关联模型使用图解

这篇博客详细介绍了PHP框架中模型关联操作的一对一(HAS_ONE和BELONGS_TO)、一对多(HAS_MANY)和多对多(MANY_TO_MANY)关系。通过UserModel和Info模型举例,展示了如何在模型中定义关联,以及在控制器中进行关联查询、添加、修改和删除数据的操作。此外,还解释了关联查询的性能考虑和参数设置。
摘要由CSDN通过智能技术生成

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

☆ 一对一关联:ONE_TO_ONE,包括HAS_ONE和BELONGS_TO

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

☆ 多对多关联:MANY_TO_MANY

关联关系必然有一个参照表,例如:

有一个用户注册表xp_user和一个用户信息表xp_info

xp_user有用户的账号、密码

09c2212339d9d0c67eafb121bd59b112.png

xp_info记录用户的基本信息 有标题、信息

fffb999a9adfccb693f8e78a0a3ba841.png

一、我们首先来说说HAS_ONE关联

首先要建立一个UserModel模型

UserModel模型:

<?phpclassUserModelextendsRelationModel {//这地方要继承RelationModelprotected$_link=array(//所有的关联定义都统一记录在模型类的$_link里面'Info'=>array(//关联的表名'mapping_type'=>HAS_ONE,//关联类型'class_mame'=>'Info',//需要关联的模型类名'mapping_name'=>'Info',//关联的映射名称,用于获取数据用'foreign_key'=>'uid',//关联的外键名称//'mapping_fields'=>'uid,title,info', //关联要查询的字段'as_fields'=>'uid,title,info:message',//直接把关联的字段值映射成数据对象中的某个字段),);}?>

UserAction控制器:

<?phpclassUserActionextendsAction {publicfunctionindex(){$user=D('User');$list=$user->relation(true)->find();//由于性能问题,新版本取消了自动关联查询机制,而统一使用relation方法进行关联操作dump($list);}}?>

输入结果如下:

1863d53d6833b0248779f5e1405927d3.png

二、一对多关联HAS_MANY

user表仍是一条数据

info表增加一条数据

UserModel模型:

<?phpclassUserModelextendsRelationModel {//这地方要继承RelationModelprotected$_link=array(//所有的关联定义都统一记录在模型类的$_link里面'Info'=>array(//关联的表名'mapping_type'=>HAS_MANY,//关联类型 一对多关联'class_mame'=>'Info',//需要关联的模型类名'mapping_name'=>'Info',//关联的映射名称,用于获取数据用'foreign_key'=>'uid',//关联的外键名称//'mapping_fields'=>'uid,title,info', //关联要查询的字段'as_fields'=>'uid,title,info:message',//直接把关联的字段值映射成数据对象中的某个字段//一对多关联这地方增加了几个参数//mapping_limit 关联要返回的记录条数//mapping_order 关联查询的顺序),);}?>

UserAction控制器:

<?phpclassUserActionextendsAction {publicfunctionindex(){$user=D('User');$list=$user->relation(true)->select();dump($list);}}?>

输出结果:

3cb3f0f33ce23628b063815674507fd1.png

一对一和一对多 基本一样、只要会一对一 一对多很容易

三、关联操作 CURD

1.以一对多模型为例,向数据库插入数据

UserAction.class.php

'title111111','info'=>'info11111111'),//这里的info是字段array('title'=>'title222222222','info'=>'info222222222'),

);$user->relation(true)->add($data);

}

}?>

运行结果:

863d261d8292bf098c75fde0d1132b51.png

2.修改这条数据

UserAction.class.php

<?phpclassUserActionextendsAction {publicfunctionindex(){$user=D('User');$data['username']='demo';$data['userpwd']='mima';$data['Info']=array(array('id'=>'5','title'=>'demo111111','info'=>'demo111111'),//这地方跟add不同 需要加修改的IDarray('id'=>'6','title'=>'demo2222222','info'=>'demo2222222'),);$user->relation(true)->where('id=16')->save($data);}}?>

运行结果:

d654c4003533158cb029fe658168074e.png

3.删除这条数据

<?phpclassUserActionextendsAction {publicfunctionindex(){$user=D('User');$user->relation(true)->delete(16);}}?>

运行结果:

a1f2f7cc506d84217fc88098fe8d5ed0.png

好了,关联操作到此结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值