Laravel 的 where or 查询你想象的那样

Mysql   2023-03-09 07:16   679   0  

要实现的 SQL 大概是这样的:

 SELECT * FROM user
  WHERE 
    group_id = 'group id'
   AND (
     name = 'name'
     OR mobile_number = 'mobile number'
     OR email = 'email'
     OR `score` > 1000
   )

实现大致代码 

  $orWhere = [];
  if ($params['name']) {
      $orWhere[] = ['name', '=', $params['name'], 'OR'];
  }
  if ($params['mobile_number']) {
      $orWhere[] = ['mobile_number', '=', $params['mobile_number'], 'OR'];
  }
  if ($params['email']) {
      $orWhere[] = ['email', '=', $params['email'], 'OR'];
  }
  if ($params['score']) {
      $orWhere[] = ['score', '>', $params['score'], 'OR'];
  }

  DB::table('users')
     ->where('group_id', 'group id')
     ->where($orWhere)
     ->get();

或者这样更直观些

 DB::table('users')
     ->where('group_id', 'group id')
     ->where(function ($query) use ($orWhere) {
        $query->orWhere($orWhere);
     })->get();

 

最终的 sql 是这样的

select
  *
from
  `users`
where
  `group_id` = 'group id'
  and (
    (
      `name` = 'name'
      or `mobile_number` = 'mobile number'
      or `email` = 'email'
      OR `score` > 1000
    )
  )


补充打印sql

\DB::connection()->enableQueryLog(); // 开启
$list = TestModel::where('age', '=', '18')->all(); // sql 执行代码
$sqllog = \DB::getQueryLog(); // 获取日志


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。
闲言碎语
你总嫌有些人懒,说得好像你勤快了就真能干出什么大事儿一样。
赞赏支持

如果觉得博客文章对您有帮助,异或土豪有钱任性,可以通过以下扫码向我捐助。也可以动动手指,帮我分享和传播。您的肯定,是我不懈努力的动力!感谢各位亲~