Нужна помощь в использовании all () и find () в той же функции для Laravel - PullRequest
6 голосов
/ 09 июля 2019

В моих макетах я отображаю все категории (из моей базы данных), используя оператор foreach. На странице это страница, показанная с помощью функции show (). Это кажется немного противоречивым, потому что я должен использовать all () для макета и найти () на странице. Есть ли способ обойти это?

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 Ответ

6 голосов
/ 09 июля 2019

Ваша проблема в том, что вы перезаписали переменную $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, чтобы получить одну категорию.

...