Laravelにおけるwith()メソッド,has()メソッドとwhereHas()メソッドの違い
with()
with()メソッドは「渇望的ロード」として使用され、それは主にlaravelが主要モデルに伴って正確な関連関係をプリロードすることを意味する.これは、モデルに追加したいすべての関連関係に役立ちます.「渇望型ロード」は1+Nのクエリー問題を緩和し、1+1回のクエリーで問題を解決し、クエリーの速度を質的に向上させた.
例:
user > hasMany > post
has()
has()メソッドは,関連関係に基づいてモデルのクエリ結果をフィルタリングするので,where条件と非常に類似した役割を果たす.has('post')のみを使用する場合は、このモデルを取得したいだけであることを示します.このモデルには少なくとも1つのpostの関連関係があります.
例:
user > hasMany > post
あなたはまだ使えます」.」でネストされたhas文を構築します.
例:
user > hasMany > post
whereHas()
whereHas()メソッドの原理はhas()メソッドと基本的に同じですが、このモデルに対するフィルタ条件を自分で追加することができます.
例:
user > hasMany > post
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