Laravel嵌套到4级不工作

时间:2016-09-09 12:24:40

标签: laravel eloquent relational-database

我有以下关系:

类别 - >子类别 - >产品 - >价

类别包含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个第一级正在运作。但是当使用第4个($ product->价格)时,我收到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时也会出现错误。

1 个答案:

答案 0 :(得分:0)

正如@GONG所说,改变你的代码以便使用急切负载,这比使用一些foreach要快得多。

请参阅laravel docs:https://laravel.com/docs/5.3/eloquent-relationships#eager-loading