Laravel-éloquent "A", "avec", "Oùhas" - que signifient-ils?

J'ai trouvé le concept et la signification derrière ces méthodes pour être un peu déroutant, est-il possible pour quelqu'un de m'expliquer quelle est la différence entre has et with est, dans le contexte d'un exemple (si possible)?

124
demandé sur lukasgeiter 2015-05-14 10:36:36

1 réponses

Avec

with() est pour chargement désireux . Cela signifie essentiellement que, le long du modèle principal, Laravel préchargera la(Les) relation (s) que vous spécifiez. Ceci est particulièrement utile si vous avez une collection de modèles et que vous voulez charger une relation pour tous. Parce qu'avec le chargement rapide, vous n'exécutez qu'une seule requête DB supplémentaire au lieu d'une 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() est de filtrer la sélection du modèle en fonction d'une relation. Donc, il agit 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 comme has() mais vous permet de spécifier des filtres supplémentaires pour le modèle associé à vérifier.

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
332
répondu lukasgeiter 2018-01-25 07:07:52