Laravel 多条件 where 查询语句

JellyBool

JellyBool

在使用 Laravel 开发应用的时候,还是会经常遇到多条件的查询语句,比如一个网站的商品筛选页面就有可能是这样子:

http://jd.com/products?color=black&size=xl&orderBy=price&sort=desc

这种方式的筛选其实我们就会使用多条件的 where 语句来做,比如我们通常会看到类似下面的代码:

$query = Product::newInstance();
 
if ($request->color) {
    $query->whereColor($request->color);
}
 
if ($request->size) {
    $query->whereSize($request->size);
}
 
if ($request->orderBy && $request->sort) {
    $query->orderby($request->orderBy, $request->sort);
}
 
$products = $query->get();

那如果说,你需要一个默认的排序结果的话,可以这样:

...其他代码
if ($request->orderBy && $request->sort) {
    $query->orderby($request->orderBy, $request->sort);
} else {
    $query->orderby('price', 'desc');
}
...其他代码

然而如果说你使用条件性的 where 查询的话,可以这样:

$products = Product::when($request->color, function ($query) use ($request) {
    return $query->whereColor($request->color);
})
->when($request->size, function ($query) use ($request) {
   return $query->whereSize($request->size);
})
->when($request->orderBy && $request->sort, function ($query) use ($request) {
   return $query->orderBy($request->orderBy, $request->sort);
})
->get();

需要默认排序的情况则是这样:

...其他代码
->when($request->orderBy && $request->sort, function ($query) use ($request) {
   return $query->orderBy($request->orderBy, $request->sort);
}, function ($query) {
   return $query->latest('price');
})
...其他代码

到这里就可以解决 Laravel 的多条件查询了!

双十一关注公众号 codecasts 即送 100 元订阅优惠劵的活动还有效!CODECASTS 支持 ETC BTC等电子购买订阅会员啦!
图片描述

本文由 JellyBool 创作, 转载和引用遵循 署名-非商业性使用 2.5 中国大陆 进行许可。

共有 5 条评论

H_Project
修改的评论也不能少于六个字哦!
nicoke
修改的评论也不能少于六个字哦!
尼好再见 回复 nicoke
修改的评论也不能少于六个字哦!
jasester 回复 nicoke
修改的评论也不能少于六个字哦!
jasester
修改的评论也不能少于六个字哦!
JellyBool 回复 jasester
修改的评论也不能少于六个字哦!
jasester 回复 JellyBool
修改的评论也不能少于六个字哦!
xw716825
修改的评论也不能少于六个字哦!
JellyBool 回复 xw716825
修改的评论也不能少于六个字哦!
smile2017
修改的评论也不能少于六个字哦!
JellyBool 回复 smile2017
修改的评论也不能少于六个字哦!
smile2017 回复 JellyBool
修改的评论也不能少于六个字哦!
yb198900724 回复 smile2017
修改的评论也不能少于六个字哦!