正在执行查询 where, whereHas in Laravel

Executing query with where, whereHas in Laravel

我正在 Laravel 5.5 中构建一个小型应用程序,我在其中查询如下内容:

$models = Contact::where('first_name', 'LIKE', '%'.$request->search_input.'%')
    ->orWhere('last_name', 'LIKE', '%'. $request->search_input.'%')
    ->orWhereHas('company', function ($q) use($request) {
        $q->where('name', 'LIKE', '%'.$request->search_input.'%');
    })
    ->whereHas('company', function ($query) {
        $query->where('type', '=', 'Research');
    })
    ->orderBy('created_at', 'desc')
    ->take(50)
    ->get();

背后的想法是,我想用[=16=搜索与first_namelast_name和他们的company name(这是一个关系数据)的联系人列表] 并在 company list 中用 type = Research 过滤它们,我的意思是只有那些 contact 应该出现 company type 作为 research

但目前我正在获取所有联系人列表,但没有按类型对其进行过滤。帮我解决这个问题。谢谢。

你需要使用where闭包:

Contact::where(function($q) use($request) {
        $q->where('first_name', 'like', '%' . $request->search_input . '%')
          ->orWhere('last_name', 'like', '%' . $request->search_input . '%')
          ->orWhereHas('company', function ($q) use($request) {
              $q->where('name', 'like', '%' . $request->search_input . '%');
        });
    })
    ->whereHas('company', function ($query) {
        $query->where('type', 'Research');
    })
    ->latest()
    ->take(50)
    ->get();