以前有寫過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