2017-02-18 9 views
0

Hallo ich arbeite an einem Laravel-Training-Projekt. Ich habe ein Problem mit Modellen und Beziehungen, wenn ich versuche, den Namen der einzelnen Produktkategorien zu erhalten. Hier
ist mein Produkt-ModellKategorie Beziehung in Laravel Undefinierte Eigenschaft: stdClass ::

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Product extends Model 
{ 
    public function category() 
    { 
    return $this->belongsTo('App\Category'); 
    } 
} 

und meine Kategorie Modell

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Category extends Model 
{ 
    protected $table = 'categories'; 

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

wenn ich versuche, die Kategorienamen für jedes Produkt zu erhalten, wie dies

 @foreach($products as $product) 
     <tr> 
     <td>{{ $product->id }}</td> 
     <td>{{ $product->name }}</td> 
     <td>{{ $product->category->name }}</td> 
     </tr> 
     @endforeach 

, während ich die laufe Seite Ich erhalte diesen Fehler

Undefined property: stdClass::$category (View: /var/www/html/projectname/resources/views/my/products/index.blade.php) 

Kann mir jemand sagen, was diesen Fehler verursacht?

Update
hier ist die Tabellenstruktur
Produkte: id, name, category_id-> unsigned()
Kategorien: ID, Name
und hier ist der Code i $ Produkte zu erhalten verwenden, um

$user_id = Auth::user()->id; 
    $products = DB::table('products')->where('user_id', $user_id)->paginate(5); 
    return view('my.products.index')->withProducts($products); 
+0

Zeigen Sie Ihre Tabellenstrukturen für Produkt und Kategorie, vielleicht Problem in falschen Fremdschlüsseln –

+0

@OdinThunder Ich aktualisierte den Beitrag siehe die Tabellenstrukturen. und erhalten Sie zurück zu mir –

+0

Ihre Fehlermeldung schlägt vor, dass "$ product" ist ein Objekt/stdClass, anstatt eine Instanz Ihres "Produkt" -Modell. Können Sie den Code posten, den Sie verwendet haben, um die Variable '$ products' zu erhalten? – Jonathon

Antwort

2

Ihr Problem ist, dass Sie Laravel Query Builder anstelle von Eloquent verwenden, aber Sie behandeln das Ergebnis, als ob es sprachgewandt war.

Wenn Sie das tun:

$products = DB::table('products')->where('user_id', $user_id)->paginate(5); 

Die $products Variable enthält eine Paginator Instanz, die Ihre Artikel als Instanzen stdClass enthält. Wenn Sie in der Lage sein wollen, dass diese mit Eloquent zu tun, sollten Sie so etwas wie dies versuchen:

$products = Product::with('category')->where('user_id', $user_id)->paginate(5); 

Dadurch wird sichergestellt, dass die Elemente in der paginator zurückgekehrt sind Instanzen Ihrer Product Eloquent-Modell, mit dem category Beziehung eifrig loaded (Dh es wird die Kategorie Beziehung für jede Product geladen mit einer Abfrage zurückgegeben, anstatt 5 Abfragen, eine für jede Product).

Sie sollten dann auf $product->category->name zugreifen können.

+0

Danke, du bist ein Genie. Ich kann nicht glauben, dass ich einen solchen Fehler gemacht habe. –

+0

Gern geschehen. Schön, dass es dir geholfen hat:] – Jonathon