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"
3 Réponses :
Si name
est un attribut et product_owner
est une fonction de relation, essayez ce qui suit:
{{ $product->product_owner()->name }}
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'] }}
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
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 !!!
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èreproduct_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 commeproduct_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