从Blade模板查询外键数据

时间:2015-10-19 22:45:06

标签: php laravel eloquent

我有两个模型:MenuCategoryMenuItem,我想在我的刀片页面上显示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 }}

UPDATE:

menu_item

id
name
menu_category_id

menu_category

id
name

使用以上所有内容时,我收到以下错误:

  

尝试获取非对象的属性

2 个答案:

答案 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');