Maison  >  Article  >  développement back-end  >  Quand dois-je utiliser `$model->relation()` plutôt que `$model->relation()` dans Laravel Eloquent ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-10-31 08:24:30349parcourir

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>

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>
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!

Déclaration:
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