Laravel 6: 试图获取 属性 的非对象

Laravel 6: trying to get property of non-object

Error: Trying to get property 'gender_id' of non-object

控制器:

public function printreports(Request $request)
{
$id = $request->get('select2'); //eg. id=1
$teachers = DB::table('teachers')->find($id);
return view('teachers.report1',compact('teachers'));
}

查看:

@foreach($teachers as $teacher)
{{$teacher->gender_id}}
@endforeach

虽然如果我用 Eloquent 通过替换以下查询来做到这一点,但我想用上面提到的数据库查询来做到这一点。

$teachers = Teacher::find($id);

在使用 find() 时不需要使用 foreach

 @if(sizeof($teachers))
 {{$teachers->gender_id}}
 {{$teachers->gender_id}}//whatever field you need to display
 {{$teachers->gender_id}}//whatever field you need to display

 @endif

如果你使用get(),

$teachers = DB::table('teachers')->where('id','=',$id)->get();

@if(sizeof($teachers))
@foreach($teachers as $teacher)
 {{$teacher->gender_id}}
 {{$teacher->gender_id}}//whatever field you need to display
 {{$teacher->gender_id}}//whatever field you need to display

@endforeach
@endif

你需要用到where,之后你会得到collection.

$teachers = DB::table('teachers')->where('id', $id)->get();

当您使用查找时,您只有一个项目

$teachers = DB::table('teachers')->find($id); 将 return 单个模型或 null,尝试使用 $teachers = DB::table('teachers')->get();

如果你想return collection查看然后使用get()这样的方法:-

public function printreports(Request $request)
{
$id = $request->get('select2'); 
$teachers = DB::table('teachers')->where('id', $id)->get();
return view('teachers.report1',compact('teachers'));
}