如何在Laravel中对原始数据库查询使用When子句

时间:2019-05-24 08:18:44

标签: mysql laravel

我在Laravel中有一些原始DB查询的查询。我可以在表列上使用when子句,但不能在由原始查询别名生成的字段上使用when子句。 我的代码中有以下内容。

            $postData = Post::query()
                    ->join('users', function ($join) {
                        $join->on('users.id', '=', 'posts.user_id')
                            ->where('users.status', '=', '1');
                    })
                    ->select('posts.id',
                        'posts.title',
                        'posts.content',
                        'posts.type',
                        'posts.user_id',
                        DB::raw("IF((select count(*) from favourites where `post_id`=`posts`.`id` 
                                AND `user_id`=$userId AND `deleted_at` IS NULL > 0), true, false ) as liked"),
                    ->orderBy('posts.created_at', 'DESC')
                    ->when($type, function($query) use($type) { 
                        return $query->where('posts.type', $type);
                    })
                    >when($likedCheck, function($query) use($likedCheck) { 
                        return $query->where('posts.liked', $likedCheck);
                    });
                    ->paginate(10);

在以上查询中,$ type上的when子句有效,但$ likedCheck上的when子句无效,因为未找到posts.liked。 更新: $ likedCheck变量为1或0。

1 个答案:

答案 0 :(得分:0)

  1. 请确保变量$ likedCheck存在并且不为假。
  2. 如果您检查且不为false,则该条件在何处有效。