has1 php,Thinkphp5.0 模型hasOne、hasMany、belongsTo详解

ThinkPHP5有关联模型的操作,但有部分初学者对数据表中常见的几种表与表的关系还存在着问题,所以使用不好关联查询。这里将hasOne、hasMany、belongsTo进行一个详细举例说明。首先,这3个的大致中文意思:hasOne:有一个,加上主谓语应该是 ,A 有一个 BhasMany:有很多,A 有很多 BbelongsTo:属于, A 属于 B这里我们准备3张表来理解他们的关系:user_group 用户分组表:id、title

user 用户表:id、user_group_id、username、password

profile 用户信息表:id、user_id、nickname、sex

1、user表需要关联user_group表,表示每一个 用户 需要知道该用户是 哪个用户分组的;

2、profile表 需要关联 用户表,表示该用户信息数据 是哪个用户的信息;

我们知道一个用户组下面可以有很多用户,所以:user_group hasMany user;

一个用户 属于 一个用户组,所以:user belongsTo user_group;

同样是user_group和user表,但我们出发点不同,关系也就不一样了。

每个用户都应该有唯一一条用户信息数据,所以:user hasOne profile;

一条用户信息 属于 一个用户,所以:profile belongsTo user

综上:

在User模型中,我们可以定义关联:function user_group(){

return $this->belongsTo('UserGroup');

}

function profile(){

return $this->hasOne('Profile');

}

我们在查询中:

$user = model('User')->find();

$user = $user->user_group; //这样user中就可以包含当前数据对应的user_grou数据了

$user = $user->profile;//这样user中就可以包含当前数据对应的profile数据了

在UserGroup模型中,我们可以定义关联:function user(){

return $this->hasMany('User');

}

在Profile模型中,我们可以定义关联:function user(){

return $this->belongsTo('User');

}

注:定义关联function的方法名可以随意定义,一般为表名或模型名;我们定义的时候是function,但获取时理解为获取属性,所以不加();

很多人理解是我定义了一个profile的方法,所以应该$user->profile(),这里要特别注意下。

这样我们在查询时,就方便了,不需要使用大量的join。

这里为大家准备了一个免费、开源的基于tp5+layui2.1.5开发的快速开发框架,既可以用来学习,也可以用来实际项目的快速开发:

码云下载:https://gitee.com/eduaskcms/eduaskcms

如果可以请给颗星星哦 感谢!

系统官网:http://www.eduaskcms.xin

如果较慢,请稍后(9.9的服务器我也无奈)

后台体验:http://www.eduaskcms.xin/run/

用户名和密码:test123

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值