【问题标题】:Union where and whereIn queries into single request将 where 和 whereIn 查询合并为单个请求
【发布时间】:2019-02-25 22:59:46
【问题描述】:

我有两个请求

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 结果。 是这样吗?

【问题讨论】:

  • 你的意思是->where('updated_at', '=', $now)->orWhereIn('key', $keysArr)
  • @JonasStaudenmeir 是的,我想要两个结果并使其独一无二
  • 你试过了吗?
  • orWhere is most "eloquent" here but know for future reference there is a actual "union()" call that can be on a query object to union with another like this $queryObject->union( $queryObject2);

标签: database laravel laravel-5 eloquent builder


【解决方案1】:

如果我正确理解了您的问题,那么您想这样做

DB::table('myTable')->select('id', 'name')
    ->whereIn('key', $keysArr)
    ->orWhere('updated_at', '=', $now)
    ->get();

如果您想要两个条件之间的“或”结果,您可以使用“orWhere”子句。

【讨论】:

    【解决方案2】:

    要专门“联合”这两个查询:

    $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 解决方案,但在其他情况下需要联合。

    【讨论】:

      【解决方案3】:

      你可以用这个:

      DB::table('myTable')->select('id', 'name')
      -> where('updated_at', '=', $now)
      -> orWhere(function($q) use($keysArr){
           $q->whereIn('key', $keysArr);
      })
      -> get();
      

      【讨论】:

        猜你喜欢
        • 2021-03-23
        • 2021-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-12
        • 1970-01-01
        • 1970-01-01
        • 2011-01-21
        相关资源
        最近更新 更多