在Laravel的同一函数中使用all()和find()需要帮助

Rya*_*Lim 6 php laravel laravel-5 laravel-blade

在布局中,我正在使用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'));
    }
Run Code Online (Sandbox Code Playgroud)

在模板中

@foreach($categories as $category)
  <li class="text-uppercase" style="white-space: nowrap;"><a href="{{ route('category.show', $category->id) }}">{{ $category->name}}</a></li>
@endforeach
Run Code Online (Sandbox Code Playgroud)

在页面本身(localhost:8000 / category / 5)中,我只想在页面中显示类别的名称,而不像上面的代码块那样显示所有内容。

{{ $categories->name}}
Run Code Online (Sandbox Code Playgroud)

当我将all()和find()都放在同一个函数中时

这是错误消息:

属性[名称]在此集合实例上不存在。(视图:C:............. \ resources \ views \ categories.blade.php)

Imm*_*yti 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'));
    }

Run Code Online (Sandbox Code Playgroud)

您应该使用$categories变量来获取所有类别,并使用它$category来获取单个类别。