Query foreign key data from Blade template

我与影子孤独终老i 提交于 2019-12-23 03:09:39

问题


I have two models: MenuCategory and MenuItem, I want to display MenuItem data on my blade page along with its MenuCategory. I know its possible to do this by adding it to the return data in my controller however I would like to do it leveraging Eloquent instead, however I receive errors.

Here are my codes:

MenuCategory model

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

MenuItem model

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

Controller

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

Blade Page

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

UPDATE:

Table menu_item

id
name
menu_category_id

Table menu_category

id
name

When using all the above I get the following error:

Trying to get property of non-object


回答1:


This error is due to the naming convention of Eloquent.

Provide the optional foreign key variable in your relationship method to make it work, ie.

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



回答2:


Probably every Item doesn't contain a related category but to make sure you may try something like this, it'll try to retrieve the name only if there is a related category is available:

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

Alternatively you may try something like this:

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

You used a different foreign key than Laravel expect so explicitly mention it like:

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


来源:https://stackoverflow.com/questions/33225197/query-foreign-key-data-from-blade-template

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!