我该如何做一个接受两个输入或仅一个输入的laravel过滤器

时间:2020-04-29 20:13:31

标签: php laravel

因此,我有一个学生数据库,我有学生的姓名,组名等,我想创建一个过滤系统,其中包含多个过滤器,例如,我想显示表的行),其学生名为John,属于A组(必须满足两个条件)。但是问题是当我只想要一个针对学生的过滤器时,例如,我不需要特定的组,我的脚本不起作用,仅针对两个过滤器,而不仅仅是一个。

我尝试过:

在途中:Route::post('/search', 'HomeController@search')->name('search'); 在HomeController中:

public function search(Request $request)
{
     $students = Student::query();
     $datas = $request->all();


    if ($request->has('group')) {
        $students = $students->where('group', $request->group);
    }

    if ($request->has('name')) {
        $students = $students->where('name', $request->name);
    }

    $students = $students->paginate(40);
    $data = array (
        'students' => $students,
        'datas' => $datas,
    );
    return view('searchStudent')->with($data);
}

在Blade中,有两个简单的输入,按钮和带有学生的表格。

<div class="col-sm-4">
   <div class="search-box grey lighten-3">
      <h2>Search Students</h2>
      <div class="input-r">
         <form action="{{ route('search') }}" method="post">
            @csrf
            <input name="name" type="text" class="form-control">
            <input name="group" type="text" class="form-control">
            <button class="btn btn-info btn-block" type="submit">Search</button>
         </form>
      </div>
   </div>
</div>
<div class="col-sm-8">
   @foreach ($students as $student)
   <div class="row pb-5">
      <div class="col-md-4">
         <div class="profiel-img">
            <img src="{{ asset($student->image) }}" alt="thumbnail" class="img-thumbnail" style="width: 200px">
         </div>
         <a class="btn btn-primary btn-sm" style="font-size: 12px; margin-left: 40px;" href="{{ route('student.show', $student) }}">Visit Profile</a>
      </div>
      <div class="col-md-8 pb-3">
         <h3 class="black-text"> {{ $student->name }}</h3>
         <h3 class="black-text"> {{ $student->group }}</h3>
         <hr style="border-top:1px solid #ccc;">
      </div>
   </div>
   @endforeach
   {{ $students->appends($datas)->links() }}
</div>

我只需要为名称输入和过滤器工作,仅为组和两个输入工作。使用此代码,它仅对两者均有效(我无法仅过滤名称,仅过滤组等)。

2 个答案:

答案 0 :(得分:4)

我相信-march=native确定请求中是否存在值。因此,它们始终是正确的,因为您的输入以表单的形式出现,并且pclmul将在空字符串上查询。尝试改用$request->has()

$students

这是为Laravel 7.x

答案 1 :(得分:1)

尝试添加

    if ($request->has('group')) {
        $students = $students->orWhere('group', $request->group);
    }

    if ($request->has('name')) {
        $students = $students->orWhere('name', $request->name);
    }