首页 > 解决方案 > Laravel - 条件 where 子句

问题描述

网络开发人员在 Laravel 工作,并在 eloquent 上度过了愉快的时光。我需要有人指出我在这个示例查询中哪里出错了。因此,当它执行时,即使 $request 等于我正在检查的内容,我也没有得到左连接之外的任何 where 子句。真的很感激在这个上打一些“头”,因为我敢肯定这是很明显的事情。

public function get_courses_by_category_id(Request $request,$category_id)
{
    $per_page = Helper::per_page();
     $query = Course::select('courses.id','courses.slug','courses.title','courses.author','courses.price','courses.free','courses.upsell','courses.image','courses.avg_ratings','courses.total_reviews')
        ->leftJoin('course_categories', 'courses.id', '=', 'course_categories.course_id')
        ->when($request->input('rating') === true, function($query, $request){
            $query->where('courses.avg_ratings', '>=', $request->rating);
        })
        ->when($request->input('price') === 'all', function($query)
            {
                $query->where('price');
            })
            ->when($request->input('price') === '250', function($query){
                $query->where(`courses.price`, `<= || is`, 249.99, `price`, null);
            })
            ->when($request->input('price') === '500', function($query){
                $query->where(`courses.price`, `>= || <=`, 250.00, `price`, 499.99);
            })
            ->when($request->input('price') === '1000', function($query){
                $query->where(`courses.price`, `>= || <=`, 500.00, `price`, 999.99);
            })
            ->when($request->input('price') === '1001', function($query){
                $query->where(`courses.price`, `>=`, 1000.00);
            });

    $courses = $query->orderBy('courses.created_at','DESC')->paginate($per_page);

    if($courses && $courses->count()){
        return response()->json(['status'=>true,'courses'=>$courses]);
    }else{
        return response()->json(['status'=>false,'courses'=>[]]);

    }
}

标签: laraveleloquent

解决方案


也许这会有所帮助

$query = Course::select('courses.id','courses.slug','courses.title','courses.author','courses.price','courses.free','courses.upsell','courses.image','courses.avg_ratings','courses.total_reviews')
        ->leftJoin('course_categories', 'courses.id', '=', 'course_categories.course_id')
        ->when($request->input('rating') === true, function($query, $request){
            $query->where('courses.avg_ratings', '>=', $request->rating);
        })
        ->when($request->input('price') !== 'all', function($query) {
            $query->when($request->input('price') === '250', function($query){
                $query->orWhere('courses.price', '<=', 249.99);
            })
            ->when($request->input('price') === '500', function($query){
                $query->orWhereBetween('courses.price', [250.00, 499.99]);
            })
            ->when($request->input('price') === '1000', function($query){
                $query->orWhereBetween('courses.price', [500.00, 999.99]);
            })
            ->when($request->input('price') === '1001', function($query){
                $query->where('courses.price', '>=', 1000.00);
            });
        });

推荐阅读