ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

ThinkPHP5有关模型hasOne、hasMany、belongsTo详解

2022-01-08 11:02:53  阅读:304  来源: 互联网

标签:profile function group ThinkPHP5 hasMany 用户 hasOne user belongsTo


hinkPHP5有关联模型的操作,但有部分初学者对数据表中常见的几种表与表的关系还存在着问题,所以使用不好关联查询。

这里将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


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。

转自:https://www.thinkphp.cn/extend/1056.html?__cf_chl_jschl_tk__=34fe3145b6ac2f27d039e58e43f98921dcd35d39-1613959542-0-AR2SNltufFsyTWfGswLUZeDXeHcG-XD_cprzDR7uyU95dnIZBvKd-0UTEPpVFRIiKDKvv4qSvf6sNA-JvBoyOc2H5kOGpLj0GJDcm_plNLuc_sDJJrOcRWBLqqGRQO2xE7WClKiU3G2xM4eS0VMo39wq56tKKWE5RYh7M0-8jTPyfDVgjO4eHB_GFrx9mra6r0C2VyGmC1kBqjb5Z_uk-wLmqzCZ9pTsYdv5FD96xBQ_2WA9fuChtEU8Tj2-zzpghWBWMYc-VQAZ-XH0baiXYrQUlyMU6W2PADzftHVNStmBl2g5R9z6x3_ZNQjlsypZF_kQzgEaSdtBZajjGIUJw-8

标签:profile,function,group,ThinkPHP5,hasMany,用户,hasOne,user,belongsTo
来源: https://blog.csdn.net/z3287852/article/details/122377397

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有