我有一个名为Student
的表,其中有1个字段,其中的Level
有3个项目:
level1, level2, leve3
。
在我的表单中,如果用户选择level3
,则必须显示错误消息。
我已经尝试过了,但这是不正确的...
修改 未定义变量:学生
public function update(Request $request, $id)
{
$student = Student::select('level')->where("id", "=", $student->level)->first();
if($student->level != "level3") {
return redirect()->route('students.index')
->with('error', 'This type of level is not allowed to you!');
}`
答案 0 :(得分:1)
您还没有要查询的学生对象。因此,当您要求在数据库中查找所有具有与$student->level
匹配的级别的学生时,它将始终失败,并带有未定义的变量。您还没有拥有 $student
对象来从中拉出关卡。我想这就是您首先运行查询的原因:让所有学生达到表单要求的级别(通过$request
)。
如果要使数据库中的所有学生都具有从表单发送的级别,则可以这样查询:
$students = Student::where("level", $request->get('level'))->get();
这将返回通过$request
对象发送到该方法的任何级别的学生集合。
如果您只想要该级别的任何一个学生(与哪个学生无关,只要他的级别是从表格发送的$ request的值),就可以使用此行:
$student = Student::where("level", $request->get('level'))->first();
这将给您一个学生对象。
我不确定您是要按级别还是按ID查找学生,因为您的update方法参数包括:
public function update(Request $request, $id){...}
如果您仅通过ID查找特定的学生,则可以使用:
$student = Student::find($id);
这将为您提供根据id
查找的确切学生。没什么要紧的(不是水平的)-它与根据id
的那个学生完全匹配。
答案 1 :(得分:1)
我检查了您的代码,我猜错了
public function update(Request $request, $id)
{
$student = Student::select('level')->where("id", "=",$id)->first(); // in this line you have passed $student->level insted of $id
if($student && $student->level != "level3") { // here also changes
return redirect()->route('students.index')
->with('error', 'This type of level is not allowed to you!');
}else{
return redirect()->back();
}
}