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)?
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