2017-02-18 165 views
0

我正在進行laravel培訓項目。當我嘗試獲取每個產品類別名稱時,我遇到了模型和關係問題。
這裏是我的產品型號laravel中的類別關係未定義的屬性:stdClass ::

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

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

和我的分類模型

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

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

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

當我試圖讓類別名稱爲這樣

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

每一個產品,而我運行頁面出現此錯誤

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

誰能告訴我是什麼原因導致了這個錯誤?

更新
這裏是表結構
產品:編號,名稱,category_id->無符號()
類別:ID,名稱
,這裏是我用來獲取$產品代碼

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

顯示您的產品和類別的表結構,也許問題在不正確的外鍵 –

+0

@OdinThunder我更新後看到表結構。並返回給我 –

+0

您的錯誤消息表明'$ product'是一個object/stdClass,而不是您的'Product'模型的一個實例。你可以發佈你用來獲取'$ products'變量的代碼嗎? – Jonathon

回答

2

您的問題是您使用Laravel的查詢生成器而不是Eloquent,但您將結果視爲是Eloquent。

當你這樣做:

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

$products變量將包含一個Paginator實例,其中包含您的項目爲stdClass實例。如果你希望能夠與雄辯做到這一點,你應該嘗試這樣的事:

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

這將確保該項目在分頁程序返回的是你Product雄辯模型的實例,與category關係急切裝(即它會加載使用一個查詢返回的每個Product的類別關係,而不是5個查詢,每個Product一個)。您可以訪問$product->category->name

+0

謝謝你,你是一個天才。我不敢相信我犯了這樣的錯誤。 –

+0

不客氣。很高興它幫助你:] – Jonathon

相關問題