Laravel通过多个字段雄辩地搜索

时间:2020-03-23 14:03:28

标签: php laravel search eloquent

我想从用户输入中搜索数据库。 一切正常,但是当我尝试查找PLD类型时,搜索查询没有给我期望的结果。

enter image description here

Firmware字段可以使用两种PLD类型,例如,固件:V49,PLD:A5和A6。 PLD类型来自hwtype和可选的hwtype2字段,固件来自hwtype。 这是我的数据库:

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 个答案:

答案 0 :(得分:1)

由于需要同时从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'));
        });
}