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

时间:2019-07-09 04:31:59

标签: 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'));
    }

在模板中

@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)

1 个答案:

答案 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来获取单个类别。