通过下拉列表排除字符串

时间:2019-07-10 20:32:41

标签: laravel

我有一个名为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!');
       }`

2 个答案:

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