要实现的 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(); // 获取日志
如果觉得博客文章对您有帮助,异或土豪有钱任性,可以通过以下扫码向我捐助。也可以动动手指,帮我分享和传播。您的肯定,是我不懈努力的动力!感谢各位亲~