我有以下关系:
类别 - >子类别 - >产品 - >价
类别包含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时也会出现错误。
答案 0 :(得分:0)
正如@GONG所说,改变你的代码以便使用急切负载,这比使用一些foreach要快得多。
请参阅laravel docs:https://laravel.com/docs/5.3/eloquent-relationships#eager-loading