Mon application Laravel 9 comporte deux modèles : le modèle brand
Chaque produit
appartient à un marque
, et un marque
relation). Le modèle product
doit fournir une propriété "calculée" (supplémentaire) appelée title_medium
qui concatène le titre de la marque et le titre du produit sur demande.
Une fois que j'ai essayé d'accéder à $this->brand
dans la méthode getTitleMediumAttribute()
L'exception possibleInfiniteloop
sera levée et l'exécution sera annulée (après N itérations). Je pense que cela a quelque chose à voir avec les relations et les séquences de chargement (chargement hâtif) mais jusqu'à présent, je n'ai pas trouvé de solution.
brand
possède un attribut title
code>.
espace de noms AppModels; utilisez IlluminateDatabaseEloquentFactoriesHasFactory ; utilisez IlluminateDatabaseEloquentModel ; utilisez IlluminateDatabaseEloquentRelationsHasMany ; utilisez IlluminateSupportStr ; la marque de classe étend le modèle { utilisez HasFactory ; /*** Attributs supplémentaires pour ce modèle*/ protégé $appends = [ 'des prix' ]; protégé $remplissable = [ 'titre' ]; /*** Le module "démarré" méthode du modèle. * * @retour nul*/ fonction statique protégée démarrée() { static :: création (fonction ($ marque) { $brand->slug = Str::slug($brand->title, '-', 'de'); }); } /*** Renvoie tous les produits d'une marque * * @return HasMany*/ produits de fonction publique (): HasMany { return $this->hasMany(Product::class); } }Numéro de modèle du produit
Chaque
produit
appartient à unmarque
. L'attribut supplémentairetitle_medium
doit concaténer le titre de la marque et le titre du produit.espace de noms AppModels; classe Le produit étend le modèle { utilisez HasFactory, consultable, filtrable ; protégé $remplissable = [ 'titre', 'identifiant_marque', 'image' ]; /*** Attributs supplémentaires pour ce modèle*/ protégé $appends = [ 'titre_long', 'prix le plus bas', 'highest_discount_percent_price', 'dernier_prix_date', 'prix_count' ]; /*** Le module "démarré" méthode du modèle. * * @retour nul*/ fonction statique protégée démarrée() { static :: création (fonction ($ produit) { $product->slug = Str::slug($product->title_long, '-', 'de'); }); } /*** Le produit appartient à une seule marque*/ marque de fonction publique() : BelongsTo { return $this->belongsTo(Brand::class); } /*** Obtenez le titre combiné du produit et de la marque*/ fonction publique getTitleMediumAttribute() : chaîne { // CELA PROVOQUE UNE "EXCEPTION POSSIBLE DE BOUCLE INFINIE" dans xdebug renvoie $this->brand->title . '' . $this->titre; } }
Essayez d'utiliserattributeau lieu de getTitleMediumAttribute, aimez ceci et dites-moi si vous obtenez toujours la même erreur (utilisez cette méthode au lieu de `getTitleMediumAttribute) :
Attribute
属性
是IlluminateDatabaseEloquentCastsAttribute
estIlluminateDatabaseEloquentCastsAttribute