Php Laravel-自定义搜索
我对我的小型车项目进行了自定义搜索,现在我有两个问题。让我首先显示我的代码: 这是我的Php Laravel-自定义搜索,php,database,laravel,search,input,Php,Database,Laravel,Search,Input,我对我的小型车项目进行了自定义搜索,现在我有两个问题。让我首先显示我的代码: 这是我的SearchController: <?php namespace App\Http\Controllers; use App\Car; use DB; use Illuminate\Http\Request; class SearchController extends Controller { // ovo je search controller public funct
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);
}
}
所以我的两个问题是:
第一个问题是,我的所有搜索输入都是必需的,如果用户键入的只是品牌或燃料,我需要向他显示所有具有特定品牌或燃料的汽车
第二个问题是我的档位输入
,它是用户在创建car post时选择的数组。现在,如果用户想要搜索某辆汽车,比如说,在搜索时只需要ABS,那么用户需要准确地检查汽车立柱上的装备。我需要我的搜索,以找到任何汽车后,只有检查齿轮,所以没有必要检查确切的齿轮。
这两个问题的解决方案是什么
编辑:
我的汽车迁移
:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCarsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cars', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('brand');
$table->string('model');
$table->string('fuel');
$table->string('gear');
$table->string('price');
$table->integer('user_id');
$table->dateTime('refresh');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cars');
}
}
和我的create.blade.php
for cars表:
@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">Create car post
</div>
<div class="card-body">
{!! Form::open(['action' => 'CarsController@store', 'method' => 'POST']) !!}
<div class="column">
<label for="brand">Brand:</label></br>
<select class="form-control" id="input" name="brand" onchange="random_function()">
<option value="" disabled 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="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="price">Price:</label></br>
<input name="price" type="text" placeholder="" class="form-control">
</div>
<br><br>
<button type="submit" class="btn btn-primary">
Submit
</button>
{!! Form::close() !!}
</div>
</div>
</div>
</div>
</div>
@endsection
@extends('layouts.app'))
@节(“内容”)
创建汽车邮政
{!!Form::open(['action'=>'CarsController@store“,”方法“=>”发布“])
品牌:
选择您的选项
大众
宝马
奥迪
型号:
燃料:
柴油机
汽油
齿轮:
防抱死制动系统
儿童锁
航行
Isofix
价格:
提交
{!!Form::close()!!}
@端部
您应该将查询分为单独的搜索部分,因为您需要3种不同类型的where子句-标准where
,where
(对于gears数组)和where
(如果设置了价格)
这应该起作用:
$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();
什么列类型是gear,因为它是一个多选选项?@mrhn它是varcharSo,所以它只是一个数组的搜索输入?我们在这里是bcs,我们想提供帮助,但代码编写服务也不是这样。。。你试过什么?@是的,搜索输入数组和
存储功能即内爆
先生,现在只要选择品牌和型号,或者只要选择价格从-到即可。但对于gears,如果我只选中一个复选框,它仍然不会显示任何内容。。请帮助,对于选择了不止一个档位的汽车,它不显示任何内容,它只显示选择了一个档位的汽车,如果我为搜索选择的档位输入my$car->gear
是多选,数组
,我需要显示所有汽车。也许是这样的吧?我在价格上有一个小错误,它显示了所有的汽车,无论我输入的是什么价格,$from
和$to
输入你的汽车表数据是什么样子的?
@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">Create car post
</div>
<div class="card-body">
{!! Form::open(['action' => 'CarsController@store', 'method' => 'POST']) !!}
<div class="column">
<label for="brand">Brand:</label></br>
<select class="form-control" id="input" name="brand" onchange="random_function()">
<option value="" disabled 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="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="price">Price:</label></br>
<input name="price" type="text" placeholder="" class="form-control">
</div>
<br><br>
<button type="submit" class="btn btn-primary">
Submit
</button>
{!! Form::close() !!}
</div>
</div>
</div>
</div>
</div>
@endsection
$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();