我有两个模型:MenuCategory
和MenuItem
,我想在我的刀片页面上显示MenuItem数据及其MenuCategory。我知道可以通过将它添加到我的控制器中的返回数据来实现这一点,但是我想利用Eloquent来做,但是我收到了错误。
以下是我的代码:
MenuCategory模型
public function items()
{
return $this->hasMany('App\MenuItem');
}
MenuItem模型
public function category()
{
return $this->belongsTo('App\MenuCategory');
}
控制器
public function show($id)
{
$item = MenuItem::findOrFail($id);
return view('menu.admin.single', compact('item'));
}
Blade Page
{{ $item->category->name }}
表 menu_item
id
name
menu_category_id
表 menu_category
id
name
使用以上所有内容时,我收到以下错误:
尝试获取非对象的属性
答案 0 :(得分:1)
可能每个Item
都不包含相关类别,但为了确保您可以尝试这样的内容,只有在相关类别可用时才会尝试检索名称:
{{ $item->category ? $item->category->name : 'No Name or empty string' }}
或者您可以尝试这样的事情:
$item = MenuItem::has('category') // check if there is a related category
->with('category') // if yes then load it with that category
->findOrFail($id);
您使用了与Laravel
期望不同的外键,因此明确提及它:
public function category()
{
return $this->belongsTo('App\MenuCategory', 'menu_category_id', 'id');
}
答案 1 :(得分:1)
此错误是由Eloquent的命名约定引起的。
在关系方法中提供可选的外键变量以使其起作用,即
$this->belongsTo('App\MenuCategory', 'menu_category_id');