从多选下拉列表中进行Laravel搜索



我正在尝试使用下拉选择创建一个搜索过滤器。仅当选择了所有下拉菜单(品牌和型号(时,代码才会显示结果。但即使选择了单个下拉列表(品牌或型号(,它也应该工作。此时,如果我选择单个下拉列表,则结果页面显示";没有找到匹配数据";。这就是我所做的-

控制器

class CarFrontController extends Controller
{   
public function index_classiccars(Request $request)
{
$filterMakes = DB::table('cars')->select('make')->distinct()->get()->pluck('make');
$filterModels = DB::table('cars')->select('model')->distinct()->get()->pluck('model');
$classiccar = Car::query();
if ($request->has('make')) {
$classiccar->where('make', $request->make);
}
if ($request->has('model')) {
$classiccar->where('model', $request->model);
}
return view(
'layouts.frontend.cars.classiccars_index',
[
'filterMakes' => $filterMakes, 'filterModels' => $filterModels,
'classiccars' => $classiccar->get()
]
);
}
public function store(Request $request)
{
return $request->all();
return view('layouts.frontend.cars.classiccars_index');
}
}

数据刀片

@forelse ($classiccars as $car)
<div class="row">        
<div class="col-lg-5 col-md-5 col-pad">
<div class="car-thumbnail">
<a href="car-details.html" class="car-img">   
<div class="price-box">
<span>£{{ $car->price }}</span>
</div>
@php $i=1; @endphp
@foreach ($car->join_caralbum as $image)
@if ($i>0)
<img class="d-block w-100" src="{{asset($image->image_location)}}" alt="car" height="225px" >

@endif     
@php $i--; @endphp

@endforeach   
</a>
<div class="carbox-overlap-wrapper">
<div class="overlap-box">
<div class="overlap-btns-area">
<a class="overlap-btn" href="{{ url('car_show/'.$car->id) }}">
<i class="fa fa-eye-slash"></i>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-7 col-md-7 col-pad align-self-center">
<div class="detail">
<h3 class="title">
<a href="car-details.html">{{ $car->make }}</a>
</h3>
<ul class="custom-list">
<li>
<a href="#">{{ $car->model }}</a> /
</li>
......
</ul>
<ul class="facilities-list clearfix">
.....
.....
....
</ul>
</div>
</div>
</div>

</div>
@empty 
No matching data found
@endforelse

过滤叶片

{!! Form::open(['action'=>'CarFrontController@index_classiccars','method'=>'GET']) !!}
<select class="form-control" name="make" id="make">
<option> Make(All)</option>
@foreach ($filterMakes as $make)
<option value="{{ $make }}">{{ $make }}</option>
@endforeach
</select><br>
<select class="form-control" name="model" id="model">
<option> Model(All)</option>
@foreach ($filterModels as $model)
<option value="{{ $model }}">{{ $model }}</option>
@endforeach
</select><br>

{{ Form::submit('Update Search',['class'=>'btn btn-primary']) }}

您的查询结果为空,因为即使您没有选择任何选项,您实际上也选择了。如果选项没有值,则值就是您赋予该选项的文本。

在您的情况下,如果您只选择一个模型,实际上您也选择了"Make(All("选项。您只需将dd($request->all())放在index_classiccars方法上就可以看到这一点。

对于检查选择,您可以为第一个(默认(选项指定空值,并使用request()->filled('input')进行控制。

最新更新