laravel巢狀預載入限制欄位
阿新 • • 發佈:2019-03-23
之前有寫過laravel關聯查詢的坑,後經一位博友提醒可以簡寫,詳見https://my.oschina.net/u/3470006/blog/3020215
自己實踐了下果然如此,要查詢user表和與之關聯的資訊表userinfo直接可以用
User::with('HasUsersInfo:userid,address')->get(['id,name']);
with裡要寫上關聯欄位userid,get部分寫上關聯的id,這樣以來就不需要用麻煩的閉包查詢
這裡可能有人想問如果想查詢關聯模型模型的關聯模型怎麼辦,很簡單,在with陣列新增關聯模型的關聯方法,比如使用者資訊表又關聯個資訊分數表InfoScore
id | infoid | score |
1 | 1 | 3.53 |
2 | 2 | 1.28 |
顯然的,InfoScore的infoid和UserInfo的id相關聯,而UserInfo模型的關聯定義如下
public function HasInfoScore(){ return $this->HasOne('InfoScore','infoid','id'); }
如果要同時查詢使用者的名字及使用者的地址,還有使用者資訊所對應的分數,可以這樣
User::with(['HasUsersInfo:userid,address,id','HasUserInfo.HasInfoScore:infoid,score'])->get(['id,name']);
注意,由於使用了超過一個的關聯,關聯字串需要使用陣列形式,巢狀的關聯 使用主模型(比如User)的關聯模型的方法(比如HasUserInfo)加上點的形式進行定義(比如HasUserInfo.HasInfoScore)就行了,還需要注意只要是關聯就必須寫上關聯欄位,比如之前查地址只用address和userid,現在加上分數的關聯就要再加上使用者資訊表的關聯欄位(也就是