Есть несколько проблем, с которыми нужно разобраться.
1) У вас есть столкновение имени переменной -
@foreach($animal as $animal)
Это перезапишет вашу коллекцию животных ($animal
) спервое отдельное животное в этой коллекции. На следующей итерации foreach
будет пытаться перебрать каждый элемент этого единственного animal
. И эти элементы (например, id
) сами по себе не имеют таких свойств, как id
, поэтому вы получаете сообщение об ошибке, которую видите.
Вы должны изменить имена переменных, чтобы избежать конфликта, например, соглашение будетиспользовать $animals
во множественном числе, чтобы указать, что это набор из более чем одного. Итак:
Контроллер
$animals = Animal::all();
// ...
return view('home', compact('animals')) ...
Вид
@foreach($animals as $animal)
2) Код поиска в вашем контроллере:
$animal = $animal->where(...);
на самом деле не get
результаты. Вам нужно добавить get()
, , как показано в документах :
$animal = $animal->where(...)->get();
3) Как указывалось в комментариях @Rwd, в вашем представлении есть 2 отдельных фрагмента контента, одинпохоже, он должен отображать коллекцию animals
(верхняя с foreach
), а вторая, которая выглядит так, должна отображать только результаты поиска. Как и в случае проблемы 1, описанной выше, у вас есть конфликт имен - оба раздела используют $animal
. После завершения цикла foreach
, $animal
- последнее животное в коллекции всех животных, а не результат вашего поиска.
Если я правильно понимаю, вы, вероятно, захотите использовать 2 отдельных имени переменных, возможно,$animals
вверху, чтобы отобразить все animals
, а затем, возможно, $result
, чтобы отобразить один результат поиска.
Если это правда, вам необходимо обновить следующее:
Контроллер
// For the top list of all animals
$animals = Animal::all();
// For the single search result
$result = false;
if (request()->has('search') && request()->get('search') != ''){
$result = $animal->where(...)->get();
}
// Return them both, separately
return view('home', ['animals' => $animals, 'result' => $result])...;
Просмотр
@foreach($animals as $animal)
// ...
@if($result)
{{ $result->id }}