1
votes

Laravel - récupération d'un attribut à partir d'une relation de modèle dans une vue en lame

J'ai créé une relation entre les produits et les utilisateurs à l'aide d'une clé étrangère appelée " previous_owner ". Je peux voir lorsque je vide la valeur que je passe à la vue que les données que je recherche sont disponibles sous:

{{ $product->product_owner->name }}

Mais comment y accéder depuis ma vue. J'essaie de parcourir les produits et de faire quelque chose comme:

{{ $product->product_owner->user->name }}

ou

$product->relations->product_owner->user->attributes->name

Mais pas de ça fonctionne, continuez à obtenir:

"Essayer d'obtenir la propriété 'nom' d'un non-objet"

 CAPTURE D'ÉCRAN DE L'OBJET a>


3 commentaires

Veuillez lancer un dd ($ product-> product_owner); et dites-moi le résultat.


Le nom de la fonction de relation product_owner et la clé étrangère product_owner sont identiques! C'est déroutant, donc soit vous devez changer le nom de la fonction de relation en quelque chose d'autre que FK ou le forcer en appelant la fonction comme product_owner () + Essayez ma réponse!


La fonction et le FK ne sont pas les mêmes, le FK est appelé previous_owner_id et la fonction est appelée product_owner


3 Réponses :


2
votes

Si name est un attribut et product_owner est une fonction de relation, essayez ce qui suit:

{{ $product->product_owner()->name }}


0 commentaires

1
votes

Votre product_owner n'est pas stdClass. C'est un tableau. Vous ne pouvez donc pas accéder à cette clé de ce tableau avec l'opérateur "->". essayez

{{ $product->product_owner['name'] }}


0 commentaires

2
votes

Dans votre vue, le code doit être similaire

@foreach($products as $product)
    @if($product->product_owner)
        {{ $product->product_owner->name}}
    @endif
@endforeach

Ce code signifie que chaque produit a product_owner. Lorsqu'un produit n'a pas product_owner , la valeur de cas de $ product-> product_owner est Null et votre code est null-> name et vous obtenir une erreur. Pour le réparer, vous devez vérifier que la relation est nulle ou utiliser l'opérateur ?? . Remplacez votre code par

@foreach($products as $product)
    {{ $product->product_owner->name ?? ''}}
@endforeach

ou

@foreach($products as $product)
    {{ $product->product_owner->name }}
@endforeach


1 commentaires

C'était en effet le problème, j'avais quelques trous dans mes données de test. J'ai couru les semoirs et ensuite cela a très bien fonctionné. Cela dit, je ne connaissais pas cette conversion, donc un bon apprentissage pour moi, je l'utiliserai pour m'assurer que je ne reçois plus cette erreur pour la même raison. Merci beaucoup !!!