Laravel-自定义搜索

问题描述 投票:1回答:1

我对我的小型汽车项目进行了自定义搜索,现在有两个问题。让我先显示我的代码:这是我的SearchController

<?php

namespace App\Http\Controllers;
use App\Car;
use DB;

use Illuminate\Http\Request;

class SearchController extends Controller
{

    // ovo je search controller


    public function index(){
        $cars = Car::all();
        return view('searchcreate')->with('cars', $cars);
    }

    public function blogs(Request $request){

        $from = $request->input('from');
        $to = $request->input('to');
        $search = $request->input('fuel');

        $cars = DB::table('cars')
                    ->where('brand', '=', $request->input('brand'))
                    ->where('model', '=', $request->input('model'))
                    ->where('fuel', '=', $request->input('fuel'))
                    ->where('gear', '=', $request->input('gear'))
                    ->whereBetween('price', [$from, $to])
                    ->get();

        return view('search')->with('cars', $cars);
    }
}

这是我的search page

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Search</div>

                <div class="card-body">
                    {!! Form::open(['action' => 'SearchController@blogs', 'method' => 'GET']) !!}
                        <div class="column">
                            <label for="name">Brand:</label></br>
                                <select class="form-control" name="brand" id="input" onchange="random_function()">                                 
                                    <option value="" selected>Select your option</option>
                                    <option value="Volkswagen">Volkswagen</option>
                                    <option value="BMW">BMW</option>
                                    <option value="Audi">Audi</option>                                                                   
                                </select>
                        </div>
                        <br>
                        <div class="column">
                            <label for="model">Model:</label></br>
                            <select class="form-control" id="output" name="model">

                            </select>
                        </div>
                        <br>
                        <div class="column">
                            <label for="fuel">Fuel:</label></br>
                            <select class="form-control" name="fuel">
                                <option value="" disabled selected>Select your option</option>
                                <option value="diesel">Diesel</option>
                                <option value="gasoline">Gasoline</option>
                            </select>
                        </div>
<br>
                        <div class="column">
                            <label for="gear">Gear:</label></br>
                            <input name="gear[]" type="checkbox" placeholder="" value="ABS">ABS
                            <input name="gear[]" type="checkbox" placeholder="" value="CL">Child lock
                            <input name="gear[]" type="checkbox" placeholder="" value="navigation">Navigation
                            <input name="gear[]" type="checkbox" placeholder="" value="isofix">Isofix
                        </div>
                        <br>
                        <div class="column">
                            <label for="from">Price from:</label></br>
                            <input name="from" type="text" placeholder="" class="form-control" value="0">
                        </div>
                        <br>
                        <div class="column">
                            <label for="to">Price to:</label></br>
                            <input name="to" type="text" placeholder="" class="form-control" value="150000">
                        </div>
                        <br>

                        <button type="submit" class="btn btn-primary">
                            Search
                        </button>
                    {!! Form::close() !!}
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

所以我的两个问题是:

[第一个问题是我需要所有搜索输入,如果用户仅输入品牌或燃料,则需要向他显示所有具有该特定品牌或燃料的汽车。

第二个问题是我的gear input,这是用户在创建汽车发布时选择的数组。现在,如果用户想要在搜索用户时仅使用ABS来搜索某辆汽车,则需要准确检查该汽车后备箱的档位。我需要搜索以查找仅具有检查过的档位的任何汽车张贴,因此无需检查确切的档位。这两个问题的解决方案是什么?

php database laravel search input
1个回答
0
投票

您应该将查询分为各个搜索部分,因为您需要3种不同的where子句类型-标准wherewhereIn(用于齿轮阵列)和whereBetween(如果价格为设置)

这应该起作用:

$carQuery = DB::table('cars');

// standard where fields
foreach ($request->only(['brand', 'model', 'fuel']) as $term => $value) {
    if (empty($value)) {
        continue;
    }
    $carQuery->where($term, $value);
}

// gear is one of gears array values
if ($gears = $request->get('gear')) {
    $carQuery->whereIn('gear', $gears);
}

// between a price from/to the values set
if (
    $from = $request->input('from')
    && $to = $request->input('to')
) {
    $carQuery->whereBetween('price', [$from, $to]);
}

$cars = $carQuery->get();
© www.soinside.com 2019 - 2024. All rights reserved.