2016-09-13 5 views
3

Dans mon contrôleur je:Laravel Relations de travail, mais le montrer -> Essayer d'obtenir la propriété d'objet non

public function showMainPage() 
{ 
     $categories = Category::with('subcategories.products.prices', 'subcategories.products.image')->get(); 

     $data = array(
      "categories" => $categories, 
     ); 

     return view('index')->with($data); 
} 

Quand je référence à ce à mon avis comme celui-ci:

@foreach($subcategory->products as $product) 
    <img src="{{ $product->image->thumbnail }}" alt=""> 

I obtenez une erreur Trying to get property of non-object.

C'est ma relation:

product.php

public function image() 
    { 
     return $this->belongsTo('App\ProductImage'); 
    } 

Ceci est mon productImage Relation:

public function product() 
    { 
     return $this->belongsTo('App\Product'); 
    } 

Qu'est-ce qui ne va pas là-bas?

+2

Les deux relations ont un 'belongsTo', ce n'est pas correct. Le produit devrait probablement être 'hasMany'. – Andrew

+0

@Scarwolf il semble que, selon vous, vous obtenez un tableau au lieu d'une collection. Pourriez-vous s'il vous plaît vérifier en utilisant '$ product ['image'] ['thumbnail']' – jaysingkar

+0

Andrew: Oh, vous avez raison. Changé à hasOne, toujours le même, cependant. (1 rangée d'image pour chaque produit). @jaysingkar Cela fonctionne. Pourquoi laravel renvoie un tableau bien? Comment puis-je changer cela à une collection ...? – Scarwolf

Répondre

0

Selon votre question, vous avez rejoint deux table avec relation. Lorsque vous récupérez des données à partir du tableau categories, les données categories et product sont renvoyées. Selon votre lien: http://pastebin.com/U3FAtcsK, votre variable $data contient ce type de hiérarchie. Vous essayez d'afficher les données du tableau image. Vous devez aller chercher image comme ceci.

$categories->subcategories->product->image->thumbnail 

Comprenez votre hiérarchie de tableaux. Tu n'as rien fait de mal. :)