我在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_name
,last_name
及其company name
(这是关系数据)的联系人列表search_input
和使用type = Research
中的company list
过滤它们,我的意思是只有那些contact
出现company
type
为research
。
但目前我正在获取所有联系人列表,而不使用类型过滤它。帮助我解决这个问题。感谢。
答案 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();