Laravel - Eloquent「Has」、「With」、「WhereHas」 - これらは何を意味するのでしょうか? 質問する

Laravel - Eloquent「Has」、「With」、「WhereHas」 - これらは何を意味するのでしょうか? 質問する

これらの方法の概念と意味が少しわかりにくいのですが、hasとの違いをwith例を挙げて説明していただくことは可能でしょうか (可能であれば)?

ベストアンサー1

with()は、 Eager Loading用です。基本的には、メイン モデルに沿って、Laravel が指定したリレーションシップをプリロードすることを意味します。これは、モデルのコレクションがあり、それらすべてにリレーションシップをロードする場合に特に役立ちます。Eager Loading では、コレクション内のモデルごとに 1 つではなく、追加の DB クエリを 1 つだけ実行するためです。

例:

User > hasMany > Post

$users = User::with('posts')->get();
foreach($users as $user){
    $users->posts; // posts is already loaded and no additional DB query is run
}

もっている

has()関係に基づいて選択モデルをフィルタリングすることです。したがって、通常の WHERE 条件と非常によく似た動作をします。has('relation')これを使用すると、この関係に少なくとも 1 つの関連モデルがあるモデルのみを取得することになります。

例:

User > hasMany > Post

$users = User::has('posts')->get();
// only users that have at least one post are contained in the collection

どこに

whereHas()は基本的に と同じように動作しますhas()が、関連モデルをチェックするための追加のフィルターを指定できます。

例:

User > hasMany > Post

$users = User::whereHas('posts', function($q){
    $q->where('created_at', '>=', '2015-01-01 00:00:00');
})->get();
// only users that have posts from 2015 on forward are returned

おすすめ記事