laravel中链式OR查询

在laravel常用的链式操作中

 

->when(isset($filter['recommend_flag']), function ($query) use ($filter) {
                if (!$filter['recommend_flag']) {
                        $query->Where('recommend_flag', 0)->orWhere('recommend_flag',          2);
                } else {
                    return $query->where('recommend_flag', $filter['recommend_flag']);
                }
            })

 

那么bug出现了 为什么呢

打开sql日志发现

select * from `fb_im_group` where `university_id` > '0' and `university_id` in ('21135') and (`recommend_flag` = '0' or `recommend_flag` = '2') and `recommend_flag` = '0' order by `id` desc limit 20 offset 0

当我想拿`recommend_flag` == 2 的数据时 , 条件是不会过滤`recommend_flag` == 0的

 

那么怎么解决此问题呢  我们需要再一层

->when(isset($filter['recommend_flag']), function ($query) use ($filter) {
                if (!$filter['recommend_flag']) {
                    return $query->where(function ($query) {
                        $query->Where('recommend_flag', 0)->orWhere('recommend_flag', 2);
                    });
                } else {
                    return $query->where('recommend_flag', $filter['recommend_flag']);
                }
            })

仔细观察不同

然后我们再查看sql日志

select * from `fb_im_group` where `university_id` > '0' and `university_id` in ('21135') and (`recommend_flag` = '0' or `recommend_flag` = '2') order by `id` desc limit 20 offset 0

这才是我想要的结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Laravel,模型关联是一种强大的功能,可以通过链式查询来处理多个模型之间的联关系。通过链式查询,我们可以在一条语句使用多个关联关系,从而简化代码并减少查询次数。 下面是一个例,演示如何使用链式查询来处理模型关联: ```php // 定义模型关联关系 class User extends Model { public function posts() { return $this->hasMany(Post::class); } } class Post extends Model { public function comments() { return $this->hasMany(Comment::class); } } class Comment extends Model { public function user() { return $this->belongsTo(User::class); } } // 使用链式查询获取用户的所有评论 $comments = User::find(1)->posts()->with('comments')->get()->flatMap->comments; // 链式查询的with()方法用于预加载关联关系,避免N+1查询问题 // flatMap()方法用于将多维数组扁平化为一维数组,获取所有的评论 // 遍历评论并输出用户信息和评论内容 foreach ($comments as $comment) { echo 'User: ' . $comment->user->name . ', Comment: ' . $comment->content; } ``` 在上面的示例,我们首先定义了User、Post和Comment三个模型之间的关联关系。然后,通过链式查询,我们可以使用`User::find(1)->posts()->with('comments')->get()`来获取用户ID为1的所有帖子,并预加载每个帖子的评论关联。 最后,通过`flatMap->comments`将获取到的多维数组扁平化为一维数组,得到所有的评论。我们可以遍历评论,并通过`$comment->user`访问每个评论的用户信息。 使用链式查询可以简化代码,提高查询效率,同时也能更好地利用Laravel框架提供的模型关联功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值