2017-02-28 17 views
0

我試圖在產品的列表頁上顯示產品列表。每個產品都有category.My表結構在laravel 5.4中發現錯誤,此收集實例上不存在屬性[類別]

categories 
id name description 
1 Cat1 Category 1 
2 Cat2 Category 2 

這是具有id name and description

products 
    id name description category_id 
    1 pro1 product 1  1 
    2 pro2 product 2  2 

這是具有CATEGORY_ID產品表格中的類別表。

Product Model 
    public function categories() {   
      return $this->belongsTo("App\Category"); 
     } 

這是產品型號,其中產品屬於類

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

這就是分類有許多產品

現在在產品控制器列表功能我的分類模型想要分類名稱的產品清單

public function index() 
    { 
     $product = Product::with('categories')->get(); 
     print_r($product->categories);die; 
     return view('product.index')->with("list",$product); 
    } 

我想要我的Out放應

products 
     id name description category name 
     1 pro1 product 1  cat1 
     2 pro2 product 2  cat2 

我發現這個錯誤"Property [categories] does not exist on this collection instance."

+0

'categories'是一種方法...'$ product-> categories()'? – Phil

+0

print_r($ product-> categories()); die;我改爲這個方法,它給了我錯誤方法類別不存在。 – vaibhav

+0

要訪問類別名稱,您應該使用$ product-> categories-> name –

回答

2

當你運行:

$product = Product::with('categories')->get(); 

你沒有得到單一的產品,而是所有的產品,所以應該是相當重命名爲:

$products = Product::with('categories')->get(); 

此外,看着你的數據庫結構,每個產品都屬於si ngle類別所以在Product模型,你應該重命名

public function categories() 
{   
    return $this->belongsTo("App\Category"); 
} 

public function category() 
{   
    return $this->belongsTo("App\Category"); 
} 

如果你這樣做改變,則應再次更改

$products = Product::with('categories')->get(); 

$products = Product::with('category')->get(); 

走掀背到控制器假定所有產品都設置類別,你可以像這樣顯示的:

foreach ($products as $product) 
{ 
    echo $product->id.' '.$product->name.' '.$product->description.' '.$product->category->name; 
} 

可以很明顯的做同樣的後面刀片視圖像這樣:

@foreach ($list as $product) 
    {{ $product->id }} {{$product->name}} {{ $product->description }} {{ $product->category->name }} 
@endforeach 
+0

@vaibhav - 趨勢是要避免更改Marcin的答案。也許你可以添加你自己的答案,並評論一些即將到來的Laravel變化。 – jww

0

我已經改變在ProductController這是我的產品控制器的功能

public function index() 
    { 
     $products = Product::with('category')->get();   
     return view('product.index')->with("list",$products); 
    } 

在產品型號

也發生了變化
public function category() { 
     return $this->belongsTo("App\Category"); 
    } 

這些變化後,我得到了我的預期結果。

相關問題