laravel - 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'=>[]]);
}
}
解决方案
也许这会有所帮助
$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);
});
});
推荐阅读
- time - PowerBI 中的时间表问题 - (用于堆积条形图)
- karma-jasmine - 错误:使用 karma.js 暂停潜在的内存不足崩溃
- dart - Flutter - 遍历对象键和值
- wordpress - WordPress 中的 VueJs 无法正常工作
- java - 如何将以下 JSON 打印为漂亮的格式?
- image - 2018年图像DPI应该是72pixels/inch吗?
- api - 停止 googlebot 抓取 Google 街景
- excel - 如何自动将 Google 电子表格导出到 Excel?
- visual-studio-code - 在 VS 代码中包含路径和无效的转义字符
- spring-boot - 如何在 Spring Actuator 1.4.5 中启用端点