laravel find()返回空刀片文件时返回错误

时间:2018-07-30 16:51:28

标签: php laravel

我尝试将模型传递给view.blade 当模型不为null时,刀片文件运行无错误 但是如果model为null,则刀片文件运行错误 这是我的代码

//StudentController code

public function viewstudent($id)
{
   $student = Student::find($id);
   $outputs = array($student);

   return view('student',['students'=>$outputs]);
}


//student.blade.php  code

<table id="myTable">

@foreach ($students as $student)    

<tr>
<td>{{$student->studentname}}</td>
<td>{{$student->studentlevel}}</td>
<td>{{$student->studentgender === 1 ?'Male':'Female'}}</td>
<td>{{$student->studentbirthdate}}</td>
<td>{{$student->studentnotes}}</td>
<td>{{$student->created_at}}</td>
<td>{{$student->updated_at}}</td>

</tr>
@endforeach

</table>

1 个答案:

答案 0 :(得分:4)

当然这是一个错误,因为您正在尝试访问非对象上的属性。您的数组将包含null的一个元素。

这是一个错误的设计,因为如果该学生不存在,则不应返回该视图。您应该抛出一些错误,可能是HTTP 404。

幸运的是,Laravel使这变得容易。当学生不存在时,您可以使用Student::findOrFail($id);引发异常。


对于我来说,奇怪的是,当控制器仅返回一名学生时,您正在视图中浏览学生。如果由于某种原因您不希望使用404,则可以始终通过array_filter运行$ outputs以摆脱null值,或者不将其添加到$ outputs中则为null。