Consulta dados da chave estrangeira do modelo da Lâmina

Eu tenho dois modelos: MenuCategory e MenuItem , eu quero exibir os dados do MenuItem na minha página da lâmina, juntamente com a sua MenuCategory. Eu sei que é possível fazê-lo adicionando-o aos dados de retorno no meu controlador, porém eu gostaria de fazê-lo alavancando Eloquent em vez disso, no entanto, eu recebo erros.

Aqui estão os meus códigos:

MenuCategory model

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

Modelo MenuItem

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

Controlador

 public function show($id) { $item = MenuItem::findOrFail($id); return view('menu.admin.single', compact('item')); } 

Página da lâmina

 {{ $item->category->name }} 

ATUALIZAR:

Tabela menu_item

 id name menu_category_id 

Tabela menu_categoria

 id name 

Ao usar tudo acima, recebo o seguinte erro:

Tentando obter propriedades de não-object

Este erro é devido à convenção de nomeação de Eloquent.

Forneça a variável de chave estrangeira opcional no seu método de relacionamento para fazê-lo funcionar, ou seja.

 $this->belongsTo('App\MenuCategory', 'menu_category_id'); 

Provavelmente, cada Item não contém uma categoria relacionada, mas para se certificar de que você pode tentar algo assim, tentará recuperar o nome somente se houver uma categoria relacionada disponível:

 {{ $item->category ? $item->category->name : 'No Name or empty string' }} 

Alternativamente, você pode tentar algo assim:

 $item = MenuItem::has('category') // check if there is a related category ->with('category') // if yes then load it with that category ->findOrFail($id); 

Você usou uma chave estrangeira diferente do que Laravel esperava, assim explicitamente, como:

 public function category() { return $this->belongsTo('App\MenuCategory', 'menu_category_id', 'id'); }