Laravelにおけるwith()メソッド,has()メソッドとwhereHas()メソッドの違い

1187 ワード

with()
with()メソッドは「渇望的ロード」として使用され、それは主にlaravelが主要モデルに伴って正確な関連関係をプリロードすることを意味する.これは、モデルに追加したいすべての関連関係に役立ちます.「渇望型ロード」は1+Nのクエリー問題を緩和し、1+1回のクエリーで問題を解決し、クエリーの速度を質的に向上させた.
例:
user > hasMany > post
$users = User::with('posts')->get();
foreach($users as $user){
    $users->posts; // posts      ,    DB  
}

has()
has()メソッドは,関連関係に基づいてモデルのクエリ結果をフィルタリングするので,where条件と非常に類似した役割を果たす.has('post')のみを使用する場合は、このモデルを取得したいだけであることを示します.このモデルには少なくとも1つのpostの関連関係があります.
例:
user > hasMany > post
//User     post     
$users = User::has('post')->get();

あなたはまだ使えます」.」でネストされたhas文を構築します.
例:
user > hasMany > post
$user = User::has('post.votes', ‘>’, '3')->get();

whereHas()
whereHas()メソッドの原理はhas()メソッドと基本的に同じですが、このモデルに対するフィルタ条件を自分で追加することができます.
例:
user > hasMany > post
$users = User::whereHas('posts', function($q){
    $q->where('created_at', '>=', '2017-11-29');
})->get();
//       post   2017 11 29