Laravel Красноречивый поиск по нескольким полям - PullRequest
0 голосов
/ 23 марта 2020

Я хочу искать в базе данных из пользовательского ввода. Все работает, но когда я пытаюсь найти тип PLD, поисковый запрос не дает ожидаемого результата.

enter image description here

Поле прошивки может быть с двумя типами PLD, например, Прошивка: V49, PLD: A5 и A6. Тип PLD происходит из поля hwtype и необязательного поля hwtype2, прошивка - из поля hw. Это моя база данных:

enter image description here

Моя функция поиска:

public function search(Request $request)
    {
      $dumpDb = Dumpdb::query();
      // Search values for select 
      $hw = Dumpdb::select('hw')->distinct()->get();
      $pld = Dumpdb::select('hwtype')->distinct()->get();

      // Search filters
      if ($request->has('hw') && $request->input('hw') != '') {
        $dumpDb = $dumpDb->where('hw', '=', $request->input('hw'));
      }

      if ($request->has('pld') && $request->input('pld') != '') {
        $dumpDb = $dumpDb->where('hwtype', $request->input('pld'))->orWhere('hwtype2', $request->input('pld'));
      }

      $countData = $dumpDb->count();
      $dumpDb = $dumpDb->orderBy('id', 'desc')->paginate(30);


      return view('dumpDb.index', compact('hw', 'pld', 'dumpDb', 'countData', 'hwtype'));
    }

1 Ответ

1 голос
/ 23 марта 2020

так как вам нужна фильтрация как по hw, так и по hwtype, вам нужно два предложения where со вторым с замыканием. первый оператор where будет фильтровать hw, а второй - фильтр hwtype со вторым уровнем where. все это означает, как

if ($request->has('hw') && $request->input('hw') != '') {
    $dumpDb = $dumpDb->where('hw', '=', $request->input('hw'));
}

if ($request->has('pld') && $request->input('pld') != '') {
    $dumpDb = $dumpDb->where(function ($query) use ($request) {
            $query->where('hwtype', $request->input('pld'))
                  ->orWhere('hwtype2', $request->input('pld'));
        });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...