I have search page and there is 3 select lists as input. when user select one or more option and click search button, page will show result that match one or more of this parameters and ignore empty parameters.
I tried to use :
if($request->country != null)
{
$searchResult = DB::table('table_name')->where('country', $request->country);
}
if($request->name != null)
{
$searchResult = DB::table('table_name')->where('name', $request->name );
}
if($request->city != null)
{
$searchResult = DB::table('table_name')->where('city', $request->city);
}
How i can show results when one or more parameters is empty. and merge results in one collection. Or is there any solution better that this.
Thank you in advance
Simple use whereOr()
logic, then its either by country, name or city. This will automatically deal with merging into one collection problem.
$searchResult = DB::table('table_name')->where('country', $request->country)
->orWhere('name', $request->name )
->orWhere('city', $request->city);
To avoid empty parameters, use when()
function, that only will execute when the condition is true.
$searchResult = DB::table('table_name')
->when($request->country, function ($query) use ($request) {
$query->orWhere('country', $request->country);
})->when($request->name, function ($query) use ($request) {
$query->orWhere('name', $request->name);
})->when($request->city, function ($query) use ($request) {
$query->orWhere('city', $request->city);
});