ThinkPHP5有关模型hasOne、hasMany、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模型中,我們可以定義關聯:
我們在查詢中:
$user = model('User')->find();
$user = $user->user_group; //這樣user中就可以包含當前數據對應的user_grou數據了
$user = $user->profile;//這樣user中就可以包含當前數據對應的profile數據了
在UserGroup模型中,我們可以定義關聯:
在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
總結
以上是生活随笔為你收集整理的ThinkPHP5有关模型hasOne、hasMany、belongsTo详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国航母都有哪几艘?
- 下一篇: 福平沿海抗日游击队第8中队驻地旧址怎么样