我有两个请求
DB::table('myTable')->select('id', 'name')->where('updated_at', '=', $now)->get();
和
DB::table('myTable')->select('id', 'name')->whereIn('key', $keysArr)->get();
我想将它们合并为一个请求,但我担心如果这样做的话
DB::table('myTable')->select('id', 'name')
-> where('updated_at', '=', $now)
-> whereIn('key', $keysArr)
-> get();
whereIn
将根据where
结果进行过滤。
是吗?
答案 0 :(得分:4)
如果我正确理解了您的问题,那么您想这样做
DB::table('myTable')->select('id', 'name')
-> whereIn('key', $keysArr)
-> orWhere('updated_at', '=', $now)
-> get();
如果您希望两个条件之间都得出“或”结果,则可以使用“ orWhere”子句。
答案 1 :(得分:2)
您可以使用此:
DB::table('myTable')->select('id', 'name')
-> where('updated_at', '=', $now)
-> orWhere(function($q) use($keysArr){
$q->whereIn('key', $keysArr);
})
-> get();
答案 2 :(得分:1)
要专门“联合”两个查询:
$queryOne = DB::table('myTable')->select('id', 'name')->where('updated_at', '=', $now);
$queryTwo = DB::table('myTable')->select('id', 'name')->whereIn('key', $keysArr);
$unifiedQueryResults = $queryOne->union($queryTwo)->get();
我实际上很喜欢Jitendra为这种特定情况提供的orWhere解决方案,但在其他情况下则需要工会。