关于多条件组合的in查询拼接的一些提问?

我想到的另外一种方式

如果有更优方式也可以评论告诉我一下,谢谢

$model = (new User())->query();
isset($params['ids']) && $model->whereIn('id', $params['ids']);

以下是提问内容

目前是用这种方式来进行查询是可行的.

    $params['ids'] = [1,2,3];
    //判断变量是否传递,并进行whereIn赋值
    isset($params['ids']) && $where = function ($query) use($params){
            $query->whereIn('id', $params['ids']);
    };
    //查询数据
    $info = $model->where($where)->get();

但是,我想问一下是不是有更优解?因为这样的写法是在太长了.

    $where[] = ['id','in',$params['ids']];

用上面这种方式也不起作用.
我看了官方文档也没有这一块的详细说明.有人了解的话能告诉我吗?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 6

想写简洁一点那就使用局部作用域 scope 来简化代码吧

3年前 评论
ColinWoo (楼主) 3年前
da_house
       $params['ids'] = [1, 2, 3];
        $query = User::query()
            ->when(isset($params['ids']), function ($q) use ($params) {
                /*
                 * @var Builder $q
                 */
                $q->whereIn('id', $params['ids']);
            })->get();

不用new User
不知道这样有没有好看一点…….最好不要用数组,尽量面向对象 不然就会老有 isset ,可以写成一个方法

3年前 评论
ColinWoo (楼主) 3年前
  • 直接看代码
    $q = UserModel::query();
    $all = Request::all();
    foreach($all as $k => $v) {
      switch($k) {
          case "ids":
              $q->whereIn("id", $v);
              break;
          case "age":
          case "name":
          case "sex":
              $q->where($k, $v);
              break;
      }
    }
3年前

最开头就是最优。

3年前 评论
ColinWoo (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!