laravel嵌套預加載限制字段

以前有寫過laravel關聯查詢的坑,後經一位博友提醒能夠簡寫,詳見http://www.javashuo.com/article/p-rhhthcbd-kn.htmlphp

本身實踐了下果真如此,要查詢user表和與之關聯的信息表userinfo直接能夠用laravel

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模型的關聯定義以下this

public function HasInfoScore(){
return $this->HasOne('InfoScore','infoid','id');
}

若是要同時查詢用戶的名字及用戶的地址,還有用戶信息所對應的分數,能夠這樣spa

User::with(['HasUsersInfo:userid,address,id','HasUserInfo.HasInfoScore:infoid,score'])->get(['id,name']);

注意,因爲使用了超過一個的關聯,關聯字符串須要使用數組形式,嵌套的關聯 使用主模型(好比User)的關聯模型的方法(好比HasUserInfo)加上點的形式進行定義(好比HasUserInfo.HasInfoScore)就好了,還須要注意只要是關聯就必須寫上關聯字段,好比以前查地址只用address和userid,如今加上分數的關聯就要再加上用戶信息表的關聯字段(也就是用戶信息的id).net

相關文章
相關標籤/搜索