laravel中with()方法,has()方法和whereHas()方法的區別


with()

with()方法是用作“渴求式加載”的,那主要意味着,laravel將會伴隨着主要模型預加載出確切的的關聯關系。這就對那些如果你想加在一個模型的所有關聯關系非常有幫助。因為“渴求式加載”緩解了1+N的查詢問題,僅需1+1次查詢就能解決問題,對查詢速度有了質的提升。

例如:

user > hasMany > post

1 $users = User::with('posts')->get();
2 foreach($users as $user){
3     $users->posts; // posts已經被加載了,沒有增加DB查詢
4 }
View Code

has()

has()方法是基於關聯關系去過濾模型的查詢結果,所以它的作用和where條件非常相似。如果你只使用has('post'),這表示你只想得到這個模型,這個模型的至少存在一個post的關聯關系。

例如:

user > hasMany > post

1 //User至少有一條post的關聯關系
2 $users = User::has('post')->get();
View Code

你還可以使用”.“來構造嵌套has語句。

例如:

user > hasMany > post

1 $user = User::has('post.votes', ‘>’, '3')->get();
View Code

whereHas()

whereHas()方法的原理基本和has()方法相同,但是他允許你自己添加對這個模型的過濾條件。

例如:

user > hasMany > post

1 $users = User::whereHas('posts', function($q){
2     $q->where('created_at', '>=', '2017-11-29');
3 })->get();
4 // 只返回用戶的post記錄在2017年11月29之后的數據
View Code

 

本文屬於個人原創,歡迎轉載,轉載請附鏈接:http://www.cnblogs.com/x-x-j/p/7921164.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM