【问题标题】:Laravel search from multi select dropdown从多选下拉列表中搜索 Laravel
【发布时间】:2020-12-12 15:13:51
【问题描述】:

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

控制器

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']) }}
          

【问题讨论】:

  • &lt;option&gt; Model(All)&lt;/option&gt;更改为&lt;option value=""&gt; Model(All)&lt;/option&gt;,然后将if ($request-&gt;has('model'))更改为if ($request-&gt;filled('model'))
  • 是的。现在可以了。非常感谢

标签: laravel forms eloquent dropdown


【解决方案1】:

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

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

对于检查选择,您可以为第一个(默认)选项提供空值并使用request()-&gt;filled('input') 控制它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多