在布局中,我正在使用foreach语句显示所有类别(来自数据库)。在页面中,它是通过show()函数显示的页面。这似乎有点矛盾,因为我必须对布局使用all()并在页面中使用find()。有什么办法可以解决这个问题?
public function show($id)
{
$categories = category::find($id);
$products = product::all()->sortBy('ID');
$categories = category::all()->sortBy('ID');
return view('categories', compact('products','categories'));
}
在模板中
@foreach($categories as $category)
<li class="text-uppercase" style="white-space: nowrap;"><a href="{{ route('category.show', $category->id) }}">{{ $category->name}}</a></li>
@endforeach
在页面本身( localhost:8000 / category / 5 )中,我只想在页面中显示类别的名称,而不是像上面的代码块一样显示所有内容。
{{ $categories->name}}
当我将all()和find()都放在同一个函数中
这是错误消息:-
属性[名称]在此集合实例上不存在。 (查看:C:............. \ resources \ views \ categories.blade.php)
答案 0 :(得分:6)
您的问题是您的$categories
变量已被覆盖。用单个类别(通过find()
)填充它之后,然后使用所有类别(通过all()
)覆盖它。
您应该覆盖show()
函数
public function show($id)
{
$category = category::find($id);
$products = product::all()->sortBy('ID');
$categories = category::all()->sortBy('ID');
return view('categories', compact('products','categories', 'category'));
}
您应该使用$categories
变量来获取所有类别,并使用$category
来获取单个类别。