我想在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>
当我尝试显示学生的姓名时,出现错误“试图获取非对象的属性'name'”
答案 0 :(得分:1)
在下面的代码中:
$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
(如果您以第二种方式执行此操作)
答案是,匹配查询的结果未分配给您认为要返回的值。
此外,我不知道它背后是否有原因,但是您不需要将所有学生存储在变量中然后进行查询。您可以使用上面的示例中的示例直接查询模型。
答案 1 :(得分:1)
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'));
}