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