首页 > 解决方案 > 当条件为真时搜索多列并加入另一个查询

问题描述

我想在帖子表中搜索搜索查询,我应该在标题和 slug 列中搜索,我还有一个复选框来仅搜索已发布的帖子。

在我的代码中,我的查询总是忽略 is_publish 查询。选中“搜索已发布的帖子”复选框后,如何仅搜索已发布的帖子?

    $query = Post::when($request->target, function ($q) use ($request) {
            $q->where('title','LIKE', "%$request->target%")->orWhere('slug', 'like', "%$request->target%");
        })->when($request->publish, function ($query) use ($request) {
            $query->where('is_publish', 1);
        });

标签: laraveleloquentlaravel-6laravel-8

解决方案


你可以像下面这样写:

$query = Post::when($request->target, function ($q) use ($request) {
    $q->whereRaw("(title LIKE '%$request->target%' or slug LIKE '%$request->target%')")
})->when($request->publish, function ($query) use ($request) {
    $query->where('is_publish', 1);
});

推荐阅读