在Laravel

时间:2018-01-25 14:32:55

标签: php laravel laravel-5.5 laravel-eloquent

我在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();

背后的想法是,我想搜索与first_namelast_name及其company name(这是关系数据)的联系人列表search_input和使用type = Research中的company list过滤它们,我的意思是只有那些contact出现company typeresearch

但目前我正在获取所有联系人列表,而不使用类型过滤它。帮助我解决这个问题。感谢。

1 个答案:

答案 0 :(得分:3)

你需要使用闭包的地方:

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();