Laravel where 子句在多个 orWhere 子句之后没有返回数据?

Posted

技术标签:

【中文标题】Laravel where 子句在多个 orWhere 子句之后没有返回数据?【英文标题】:Laravel where clause is not returning data after multiple orWhere clauses? 【发布时间】:2020-05-08 12:19:06 【问题描述】:

我正在使用 laravel 6.10 版本,因为我正在实现搜索,

我有 3 张桌子

1) course_category

2) course_sub_category

3) 课程 [course_id_category(外键),course_sub_category_id(外键)]

下面是我的代码

$course = $request->searchItem;

    if ($course=="") 
        $Courses = DB::table('course')
            ->join('course_category', 'course.course_category_id', '=', 'course_category.id')
            ->select('course.*','course_category.title as category_title','course_category.thumb as category_thumb')
            ->orderBy('course.title','asc')
            ->paginate(15);
    
    else
        $Courses = DB::table('course')
            ->join('course_category', 'course.course_category_id', '=', 'course_category.id')
            ->join('course_sub_category', 'course.course_sub_category_id', '=', 'course_sub_category.id')
            ->select('course.*','course_category.title as category_title','course_category.thumb as category_thumb')
            ->where('course.title', 'LIKE', '%'.$course.'%')
            ->orWhere('course_category.title', 'LIKE', '%'.$course.'%')
            ->orWhere('course_sub_category.title', 'LIKE', '%'.$course.'%')
            ->get();
    

当我返回值时,我正在获取 0 个数组,但是当我从现有的查询中删除一个或位置时,我的查询正在工作并且它的返回值我们所有的值都匹配

表示当我在 laravel 中使用多个 orWhere 时,我的 where 不起作用,请分享解决方案。

【问题讨论】:

【参考方案1】:

->orWhere 不像典型的 SQL 那样工作。你应该这样使用它:

$Courses = DB::table('course')
            ->join('course_category', 'course.course_category_id', '=', 'course_category.id')
            ->join('course_sub_category', 'course.course_sub_category_id', '=', 'course_sub_category.id')
            ->select('course.*','course_category.title as category_title','course_category.thumb as category_thumb')
             ->where(function($query) use ($course)
    $query->where('course.title', 'LIKE', '%'.$course.'%')
    $query->orWhere('course_category.title', 'LIKE', '%'.$course.'%')
    $query->orWhere('course_sub_category.title', 'LIKE', '%'.$course.'%')
)
->get();

【讨论】:

以上是关于Laravel where 子句在多个 orWhere 子句之后没有返回数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel Eloquent 创建多个 Where 子句查询?

如何使用 Laravel Eloquent 创建多个 Where 子句查询?

在 laravel 查询构建器中使用多个 where 子句

如何在 switch 语句中使用 laravel 模型运行多个 Where 子句

来自给定数组的查询中的 Laravel 多个 where 子句

Laravel 6:如何将多个 where 子句添加到关系中