ThinkPHP5有关联模型的操做,但有部分初学者对数据表中常见的几种表与表的关系还存在着问题,因此使用很差关联查询。
这里将hasOne、hasMany、belongsTo进行一个详细举例说明。
首先,这3个的大体中文意思:
hasOne:有一个,加上主谓语应该是 ,A 有一个 B
hasMany:有不少,A 有不少 B
belongsTo:属于, A 属于 B
这里咱们准备3张表来理解他们的关系:
user_group 用户分组表:id、title
user 用户表:id、user_group_id、username、password
profile 用户信息表:id、user_id、nickname、sex
一、user表须要关联user_group表,表示每个 用户 须要知道该用户是 哪一个用户分组的;
二、profile表 须要关联 用户表,表示该用户信息数据 是哪一个用户的信息;
咱们知道一个用户组下面能够有不少用户,因此:user_group hasMany user;
一个用户 属于 一个用户组,因此:user belongsTo user_group;
一样是user_group和user表,但咱们出发点不一样,关系也就不同了。
每一个用户都应该有惟一一条用户信息数据,因此:user hasOne profile;
一条用户信息 属于 一个用户,因此:profile belongsTo user
综上:
在User模型中,咱们能够定义关联:php
function user_group(){
return $this->belongsTo('UserGroup');
}
function profile(){
return $this->hasOne('Profile');
}
复制代码
git
咱们在查询中:
$user = model('User')->find();
$user = $user->user_group; //这样user中就能够包含当前数据对应的user_grou数据了
$user = $user->profile;//这样user中就能够包含当前数据对应的profile数据了
在UserGroup模型中,咱们能够定义关联:thinkphp
function user(){
return $this->hasMany('User');
}
复制代码
服务器
在Profile模型中,咱们能够定义关联:app
function user(){
return $this->belongsTo('User');
}
复制代码
框架
注:定义关联function的方法名能够随意定义,通常为表名或模型名;咱们定义的时候是function,但获取时理解为获取属性,因此不加();
不少人理解是我定义了一个profile的方法,因此应该$user->profile(),这里要特别注意下。
这样咱们在查询时,就方便了,不须要使用大量的join。
这里为你们准备了一个免费、开源的基于tp5+layui2.1.5开发的快速开发框架,既能够用来学习,也能够用来实际项目的快速开发:
码云下载:https://gitee.com/eduaskcms/eduaskcms
若是能够请给颗星星哦 感谢!
系统官网:https://www.eduaskcms.xin
若是较慢,请稍后(9.9的服务器我也无奈)
后台体验:http://demo.eduaskcms.xin/run/
用户名和密码:test123 学习
下方评伦留言或+v:获取~ui