Laravel中进行复杂的'and'与'or'条件联合查询

本文中使用的Laravel框架版本:Laravel Framework 8.53.1



在laravel框架中如何实现 where field1 = 1 and ( field2 = 2 or field3 = 3 ) and field4 = 4 等这种类似的 需要 and 和 or 联合起来的复杂查询语句?


实现代码示例如下:

//DB::enableQueryLog();

$list = DB::table('user')
    ->where(function ($query) {  //闭包返回的条件会包含在括号中
           $query->where('id', 1)
            ->where(function($query){
                $query->where('realname' , '周总');
                $query->orWhere('login_num', '>', 500);
            });

    })
    ->where('gender', 1)
    ->get();

//echo "<pre/>";
//print_r(DB::getQueryLog());


用DB::getQueryLog(); 输出实际执行的SQ语句如下:

Array
(
    [0] => Array
        (
            [query] => select * from `user` where (`id` = ? and (`realname` = ? or `login_num` > ?)) and `gender` = ?
            [bindings] => Array
                (
                    [0] => 1
                    [1] => 周总
                    [2] => 500
                    [3] => 1
                )

            [time] => 4
        )

)

即:

select * from `user` where (`id` = 1 and (`realname` = '周总' or `login_num` > 500)) and `gender` = 1


其它类似代码示例如下:

//DB::enableQueryLog();

$list = DB::table('user')
    ->where(function ($query) {  //闭包返回的条件会包含在括号中
        return $query->where('id', 1)
            ->orWhere([
                ['realname', '周总'],
                ['login_num', '>', 500]
            ]);
    })
    ->where('gender', 1)
    ->get();
    
//print_r(DB::getQueryLog());

用DB::getQueryLog(); 输出实际L执行的SQ语句如下:
select * from `user` where (`id` = 1 or (`realname` = '周总' and `login_num` > 500)) and `gender` = 1



声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

小周博客
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

精彩评论

全部回复 0人评论 7,777人参与

loading