Поиск в таблице по одному или нескольким из 3 параметров laravel - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть страница поиска и есть 3 списка выбора в качестве входных данных. когда пользователь выбирает один или несколько параметров и нажимает кнопку поиска, на странице будет отображаться результат, соответствующий одному или нескольким из этих параметров, и игнорируются пустые параметры.

Я пытался использовать:

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);
}

Как Я могу показать результаты, когда один или несколько параметров пуст. и объединить результаты в одну коллекцию. Или есть какое-то решение лучше, чем это.

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 09 февраля 2020

Если вы хотите пропустить недоступные параметры поиска, которые вы можете использовать.

$query=DB::table('table_name');
    switch (true){
        case isset($request->country);
            $query->where('country',$request->country);
            continue;
        case isset($request->city);
            $query->where('city',$request->city);
            continue;
        case isset($request->name);
            $query->where('name',$request->name);
    }
   $result= $query->get();
2 голосов
/ 09 февраля 2020

Простое использование whereOr() logi c, затем по стране, имени или городу. Это автоматически решит проблему слияния в одну коллекцию.

 $searchResult = DB::table('table_name')->where('country', $request->country)
     ->orWhere('name', $request->name )
     ->orWhere('city', $request->city);

Чтобы избежать пустых параметров, используйте функцию when(), которая будет выполняться только при выполнении условия.

$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);
    });
...