联合where和whereIn查询单个请求

时间:2018-09-21 13:56:53

标签: database laravel laravel-5 eloquent builder

我有两个请求

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结果进行过滤。 是吗?

3 个答案:

答案 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解决方案,但在其他情况下则需要工会。