繁体   English   中英

如何将多列合并为一个? Laravel

[英]How to join multiple column into one? Laravel

这是我的控制器:

public function search(request $request)
{
    $request->flash();
    $search = $request->get('q');
    $vehicles = vehicle::where('make', 'LIKE', '%'.$search. '%')
                ->orWhere ( 'model', 'LIKE', '%' . $search . '%' )
                ->orWhere ( 'year', 'LIKE', '%' . $search . '%' )
                ->paginate(9);
    return view('user.vehicles.vehicles',compact('vehicles'));
}

路线:

Route::get('/vehicles/search', 'VehiclesController@search');

拉拉维尔之刃

<form action="/vehicles/search" method="get">
  <div class="row">
    <div class="col-md-12 my-1">
      <div class="input-group">
        <input type="text" class="form-control" name="q" value="{{ old('q')}}" autocomplete="off" placeholder="Search for brand, model, year, etc">
        <span class="input-group-btn">
          <button class="btn btn-success" type="submit"><span class="fa fa-search"></span></button>
        </span>
      </div>
    </div>
  </div>
<form>

问题

当我搜索ex: Toyota ,由于

where('make', 'LIKE', '%'.$search. '%')

但是,当我搜索Toyota Innova 2013 ,没有结果。

我想要的是:当我搜索Toyota Innova 2013 ,代码应显示来自makemodelyear所有结果

尝试这个:

$vehicles = vehicle::where(function($query) use ($search) {
    $parts = explode(' ', $search);
    foreach ($parts as $part) {
        $query = $query->where('make', 'LIKE', '%'.$part. '%')
            ->orWhere ( 'model', 'LIKE', '%' . $part. '%' )
            ->orWhere ( 'year', 'LIKE', '%' . $part. '%' )
    }
})

我尚未对此进行测试,但是应该将搜索查询中的每个单词与每个列进行比较

您必须以一种形式根据列制作三个搜索按钮。

您正在使用$search从控制器传递三个参数。

在您的模型中尝试以下操作:

第一栏

 if ($request->make != null && $request->make != '') {
     $data->where('vehicle.make', $request->make);
 }

第二栏

 if (isset($request->model) && $request->model != '') {
     $data = $data->where('vehicle.model', $request->model);
 }

第三栏

 if (isset($request->year) && $request->year != '') {
     $data = $data->where('vehicle.year', $request->year);
 }

我使用db :: raw和concat
laravel文档

use DB;

public function search(request $request)
     {
      $request->flash();
      $search = $request->get('q');
      $vehicles = vehicle::where(\DB::raw("CONCAT_WS(' ', make, model, year)"), 'LIKE', '%' . $search . '%')
      ->paginate(9);
      return view('user.vehicles.vehicles',compact('vehicles','vehicless'));
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM