Laravel – Eloquent “Has”, “With”, “WhereHas” – Que veulent-ils dire?

J’ai trouvé le concept et le sens derrière ces méthodes un peu déroutants, est-il possible que quelqu’un m’explique la différence entre has et with , dans le contexte d’un exemple (si possible)?

    Avec

    with() est pour un chargement rapide . Cela signifie en gros que, selon le modèle principal, Laravel va précharger la ou les relations que vous spécifiez. Cela est particulièrement utile si vous avez une collection de modèles et que vous souhaitez charger une relation pour tous. Parce qu’avec un chargement rapide, vous n’exécutez qu’une seule requête de firebase database au lieu d’une seule pour chaque modèle de la collection.

    Exemple:

    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 } 

    A

    has() consiste à filtrer le modèle de sélection en fonction d’une relation. Donc, il agit de manière très similaire à une condition WHERE normale. Si vous utilisez simplement has('relation') cela signifie que vous voulez seulement obtenir les modèles qui ont au moins un modèle lié dans cette relation.

    Exemple:

    User > hasMany > Post

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

    Où est

    whereHas() fonctionne essentiellement de la même manière que has() mais vous permet de spécifier des filtres supplémentaires à vérifier pour le modèle associé.

    Exemple:

    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