试图获取非对象的属性“名称”-Laravel

时间:2020-03-25 21:27:28

标签: php laravel eloquent

我想在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'”

2 个答案:

答案 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'));
}