Попытка получить свойство 'имя' необъекта - Laravel - PullRequest
0 голосов
/ 26 марта 2020

Я хочу реализовать опцию поиска для некоторых данных в моем приложении Laravel, но у меня есть некоторые проблемы с этим:

public function index()
{

     $students= Student::all(); // When I use this form it appear all of Students even I put a name in Search option
     $students= new Student;//When I use this form I have this error: Trying to get property 'name' of non-object ...

    if (request()->filled('name')) {

       $students->where('name', '=', request()->input('name'));         
   }
    else{
           $students=Student::all();
    }
    return view('students.index',['students'=>$students]);
}

И мой взгляд:

 <form action="{{action('StudentController@index')}}" class="d-flex w-100">
                <div class="col-4 p-0">
                    <input class="form-control" type="text" name="name" id="name" placeholder="name">
                </div>
 </form>

Когда я пытаюсь отобразить имена учеников, я получаю сообщение об ошибке «Попытка получить свойство« имя »необъекта»

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Students::all() вернет коллекцию всех студентов, new Student вернет пустую модель. Ни то, ни другое вы не хотите. Попробуйте вместо этого:

public function index()
{
    $request = request();
    if ($request->filled('name')) {
       // return a collection of students filtered by name
       $students = Student::where('name', $request->name)->get();         
    } else {
       // return a collection of all students
       $students = Student::all();
    }
    return view('students.index', compact('students'));
}
1 голос
/ 26 марта 2020

В вашем коде ниже:

$students->where('name', '=', request()->input('name'));         

Вы на самом деле не присваиваете результат этого запроса. Вы можете сделать это следующим образом:

return App\Student::where('name', request()->input('name'))->get();

Или

$students = App\Student::where('name', '=', request()->input('name'))->get()

, а затем позже вернуть students в вашу функцию (если вы делаете это 2-м способом)

Ответ заключается в том, что результат вашего соответствующего запроса не присваивается значению, которое, по вашему мнению, вы возвращаете.

Кроме того, я не знаю, есть ли причина этого, но вы этого не делаете нужно сохранить всех студентов в переменной, а затем запросить ее. Вы можете запросить модель напрямую, используя ее, как показано в моих примерах выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...