1. 程式人生 > >laravel巢狀預載入限制欄位

laravel巢狀預載入限制欄位

開發十年,就只剩下這套架構體系了! >>>   

之前有寫過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,現在加上分數的關聯就要再加上使用者資訊表的關聯欄位(也就是