廢話不多說。先看資料庫結構:
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,所以想查出...