Quand dois-je utiliser `$model->relation()` plutôt que `$model->relation()` dans Laravel Eloquent ?

Linda Hamilton
Libérer: 2024-10-31 08:24:30
original
362 Les gens l'ont consulté

When should I use  `$model->relation()` contre `$model->relation()` dans Laravel Eloquent ? 
relation()` contre `$model->relation()` dans Laravel Eloquent ? " />

Différence entre les appels de méthode $model->relation(); et $model->relation dans Eloquent

Dans l'ORM Eloquent de Laravel, comprendre la distinction entre $model-> ;relation(); et $model->relation est crucial.

$model->relation()

L'appel de $model->relation() appelle directement la fonction de relation définie dans le modèle. Cette fonction ressemble généralement à :

<code class="php">public function distributors()
{
    return $this->hasMany('Distributor');
}</code>
Copier après la connexion

En appelant $store->distributors(), vous obtenez la valeur de retour de $this->hasMany('Distributor'), qui est un instance de IlluminateDatabaseEloquentRelationsHasMany.

Quand utiliser $model->relation() : Cette méthode est utile lorsque vous devez personnaliser davantage la requête de relation avant de l'exécuter. Par exemple :

<code class="php">$distributors = $store->distributors()->where('priority', '>', 4)->get();</code>
Copier après la connexion
Utiliser $store->distributors()->get() est une alternative plus simple, mais elle donne le même résultat.

$model->relation

Laravel utilise une technique en coulisse qui permet un accès direct aux résultats de la relation en tant que propriétés. L'appel de $model->relation n'accède pas réellement à une propriété existante. Au lieu de cela, Laravel intercepte cet appel et l'achemine vers __get().

Cette méthode appelle finalement getAttribute() avec le nom de la propriété (« distributeurs »), qui vérifie si la relation est mise en cache (« relations » tableau). Dans le cas contraire, et si une méthode relationnelle existe, il tente de la charger (getRelationshipFromMethod). Enfin, le modèle récupère les résultats de la relation via getResults(), qui exécute la requête.

En substance, $model->relation est équivalent à $model->relation()->get (), renvoyant directement les résultats de la relation.

Conclusion

    $model->relation() renvoie l'objet de relation lui-même, permettant des personnalisations supplémentaires des requêtes.
  • $model->relation récupère directement les résultats de la requête, fournissant ainsi un raccourci pratique.
Comprendre cette différence est essentiel pour une utilisation efficace d'Eloquent.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!