TP6踩坑 關聯查詢

2021-10-10 10:14:12 字數 1848 閱讀 8278

廢話不多說。先看資料庫結構:

user表(user):

隊伍表(team):

加粉表(fans):

需求:查詢同一活動中,每個參與活動的使用者的加粉數統計,並排名。如圖。

根據需求我們可以很容易在fans模型類中寫出基本的sql語句:

$list = self::fieldraw('uid,team_id,sum(fans_num) as '.$funs_num) -> where($where) -> group('uid') -> order($funs_num,$order) -> select() -> toarray();

//返回值:[,

,]

現在只需要完善team_id與uid的具體資訊就可以了。根據表結構,我們可以看出來,對於加粉表來說,與user表是多對一關係,與team表也是多對一關係。

那麼我們可以很容易得出fans模型類中的關聯關係

根據tp6文件的關聯查詢語法,我們可以獲取以下語句:

self::with(['user','team']) -> fieldraw('uid,team_id,sum(fans_num) as '.$funs_num) -> where($where)  -> group('uid') -> order($funs_num,$order) -> select() -> toarray();

//返回值:

[ ,

"team":

},

可見,把user的所有欄位都帶出來了,我們只需要user真實名字,跟隊伍的真實名字,根據文件,我們得出以下語句:

self::with(['user'=>function(query $query),'team'=> function(query $query)]) -> fieldraw('uid,team_id,sum(fans_num) as '.$funs_num) -> where($where)  -> group('uid') -> order($funs_num,$order) -> select() -> toarray();

//返回值:

[ ,,]

返回值出乎了我們的預料,user與team都為null,也就是查詢不到了!!!文件裡面並沒有說明這種情況。

翻來覆去弄了好久,最後發現,篩選欄位中必須包含所有的關聯主鍵,並且外層field中必須包含關聯外來鍵,否則查詢不到相應的資料。

返回值:[,

"team": },,

"team": },,

"team": }]

終於我們查詢出了想要的資料。這裡關聯查詢field欄位中一定要包含各表的主鍵,否則會查詢不到資料。

TP6模型多對多關聯查詢

user模型 class user extends model 多對多關聯查詢 user表查詢條件 map role表查詢條件 where data user with roles function query use where where map select 或 user表查詢條件 map r...

tp6 日期搜尋與多表聯查join

之前tp5的時候一直這樣寫 同欄位名時,使用field明確返回的字段以及別名 join cmf mudidi class w a.class id w.id mudidi db table cmf mudidi alias a field a.id,w.type id,a.name,w.class ...

TP5 一對多關聯查詢

a表 car 購物車 goodid 商品id sizeid 規格id b表 commondity 商品表 id 對應goodid 商品名稱 title c表 size 規格表 id對應sizeid 規格名稱 text 在購物車頁面,我們需要查詢到使用者購物車裡面的商品,大部分都是存的id,所以想查出...