【问题标题】:Laravel Eloquent search by multiple fieldsLaravel Eloquent 多字段搜索
【发布时间】:2020-03-23 14:03:28
【问题描述】:

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

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

我的搜索功能:

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

【问题讨论】:

  • 您期待什么以及目前得到什么??
  • 例如用户选择固件:B50 和 PLD 类型:A2,但由于某种原因,我得到了 B50 和用户选择以外的其他固件版本
  • 当您使用或使用固件 b50 和 pld a2 获取所有数据时。您必须在 where 闭包中执行此操作。
  • 但是没有 orWhere 我的查询没有找到我的记录。我需要循环抛出 hwtype 和 hwtype2。例如,在某些情况下,我在 hwtype 和 hwtype2 中具有相同的 PLD 类型 (A2),因此我需要这两个表中的所有记录。
  • 我正在为您添加答案。检查一下。

标签: php laravel search eloquent


【解决方案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'));
        });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 2014-10-25
    • 2013-06-19
    • 2014-06-28
    • 2014-05-19
    • 2018-07-23
    • 1970-01-01
    • 2014-03-12
    相关资源
    最近更新 更多