因此,我有一个学生数据库,我有学生的姓名,组名等,我想创建一个过滤系统,其中包含多个过滤器,例如,我想显示表的行),其学生名为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>
我只需要为名称输入和过滤器工作,仅为组和两个输入工作。使用此代码,它仅对两者均有效(我无法仅过滤名称,仅过滤组等)。
答案 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);
}