Maison > Article > développement back-end > Quand dois-je utiliser `$model->relation()` plutôt que `$model->relation()` dans Laravel Eloquent ?
relation()` contre `$model->relation()` dans Laravel Eloquent ? " />
Dans l'ORM Eloquent de Laravel, comprendre la distinction entre $model-> ;relation(); et $model->relation est crucial.
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->relationLaravel 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
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!