This is my controller:
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:
Route::get('/vehicles/search', 'VehiclesController@search');
Laravel Blade
<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>
Problem:
When I search for ex: Toyota
, all Toyota in vehicle will show because of
where('make', 'LIKE', '%'.$search. '%')
But when I search for Toyota Innova 2013
, there is no result.
What I want: when I search for Toyota Innova 2013
, the code should show all the result from make
, model
and year
try this:
$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. '%' )
}
})
I have not tested this however it should compare each word in the search query with each of the columns
You have to make three search buttons according to column in one form.
You are passing three parameters from controller using $search
.
Try this in your model:
First column
if ($request->make != null && $request->make != '') {
$data->where('vehicle.make', $request->make);
}
Second column
if (isset($request->model) && $request->model != '') {
$data = $data->where('vehicle.model', $request->model);
}
Third column
if (isset($request->year) && $request->year != '') {
$data = $data->where('vehicle.year', $request->year);
}
i use db::raw and concat
laravel doc
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'));
}