我想从具有4个条件的数据库垫中进行选择,其中1个条件必须使用“or”。我写了这个查询生成器,它的工作原理。但我想知道我是否可以使用较短的查询。例如,在“where”括号中使用3个条件,在“或Where”括号中使用1个条件。这是我的查询:$pads = DB::table('pads') ->join('languages', 'pads.language_id', '=', 'languages.id') ->select('pads.id', 'pads.title', 'pads.status', 'pads.people', 'pads.created_at', 'languages.name as language') ->where([ ['pads.user_id', Auth::user()->id], ['pads.title', 'LIKE', "%{$request->search}%"], ['pads.status', $request->status], ['pads.language_id', $request->lg_id] ]) ->orWhere([ ['pads.user_id', Auth::user()->id], ['pads.people', 'LIKE', "%{$request->search}%"], ['pads.status', $request->status], ['pads.language_id', $request->lg_id] ]) ->orderBy('created_at', 'desc') ->get();
1 回答
侃侃尔雅
TA贡献1801条经验 获得超15个赞
您必须在 内部中对条件进行分组,并以函数作为参数。ORorWhere()
->where([
['pads.user_id', Auth::user()->id],
['pads.status', $request->status],
['pads.language_id', $request->lg_id]
])
->where(function ($query) use ($request) {
$query->where('pads.title', 'LIKE', "%{$request->search}%")
->orWhere('pads.people', 'LIKE', "%{$request->search}%");
})
这将生成类似于
WHERE pads.user_id = ?
AND pads.status = ?
AND pads.language_id = ?
AND (
pads.title LIKE ?
OR pads.people LIKE ?
)
- 1 回答
- 0 关注
- 83 浏览
添加回答
举报
0/150
提交
取消