2016-09-09 79 views
0

我有如下所示的關係:Laravel嵌套至4級不工作

分類 - >類別 - >產品 - >價格

一個類中包含X的子類別。 子類別包含X產品。 產品含有X的價格(新價格,舊價格,每個價格變動一個記錄)

我想做到以下幾點:

@foreach($categories as $category) 
    [...] 
    @foreach($category->subcategories as $subcategory) 
     [...] 
     @foreach($subcategory->products as $product) 
      [...] 
       @foreach($product->prices as $price) 


[... @endforeach x4 ...] 

3級第一水平的工作。然而,當使用4th($ product-> prices)時,我得到一個Trying to get property of non-object錯誤。

在模型中的關係:

Category.php

class Category extends Model 
{ 
    public function subcategories() 
    { 
     return $this->hasMany('App\SubCategory'); 
    } 
} 

SubCategory.php

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

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

Product.php

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

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

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

ProductPrice.php

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

這是我送我的看法:

class PageController extends Controller 
{ 
    public function showMainPage() 
    { 
     $categories = Category::with('subcategories')->get(); 

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

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

這工作得很好,即使有產品,但開始有錯誤使用ProductPrices時。

+0

'$類別=類別::與( 'subcategories.products.prices') - >獲得();' – GONG

+0

完全相同的錯誤@GONG – Scarwolf

+0

你試圖調用'$產品 - >價格'而你的關係是'價格' – GONG

回答

0

正如@GONG所說,改變你的代碼以使用急切的加載,這會比使用一些惡意代碼運行得快得多。

見laravel文檔:https://laravel.com/docs/5.3/eloquent-relationships#eager-loading

+0

我渴望加載,或者我錯了嗎?但我需要對它們進行foreach,因爲我想從數據庫加載所有記錄並顯示它們。例如,我實際上使用$ category-> subcategories-> products來加載子類別中的所有產品。你能解釋一下,如果我做錯了什麼? – Scarwolf