我想从用户输入中搜索数据库。 一切正常,但是当我尝试查找PLD类型时,搜索查询没有给我期望的结果。
Firmware字段可以使用两种PLD类型,例如,固件:V49,PLD:A5和A6。 PLD类型来自hwtype和可选的hwtype2字段,固件来自hwtype。 这是我的数据库:
我的搜索功能:
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'));
}
答案 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'));
});
}