数据筛选新写法
2018年9月7日1.控制器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public function index(Request $request) { $builder = Product::query()->where('on_sale', true); #::query 这个方法代表开始查询这个模型,个人感觉加上::query也没有什么用,可能有预加载吧 if ($search = $request->input('search', '')) { #判断搜索是否为空 $like = '%' . $search . '%'; #定义号模糊查询 $builder->where(function ($query) use ($like) { #参数分组,有时,您可能需要创建更高级的WHERE子句,如“WHERE”子句或嵌套参数分组 $query->where('title', 'like', $like) #查询标题是否有关键词 ->orWhere('description', 'like', $like) #查询详情是否有关键词 ->orWhereHas('skus', function ($query) use ($like) { #第一个参数是模型关连的方法名,第二个参数继承上一步的query,第三个使用模糊查询字符 $query->where('title', 'like', $like) #where查询 ->orWhere('description', 'like', $like); #orWhere }); }); } if ($order = $request->input('order', '')) { #判断是否排序 if (preg_match('/^(.+)_(asc|desc)$/', $order, $m)) { #是否是以 _asc 或者 _desc 结尾 if (in_array($m[1], ['price', 'sold_count', 'rating'])) { #判断接收的参数师傅是这几个 $builder->orderBy($m[1], $m[2]); #开始排序 } } } $products = $builder->paginate(16); #开始分页 #products 是遍历页面数据用的,filters是显示查询参数用的 return view('products.index', ['products' => $products, 'filters' => ['search' => $search, 'order' => $order,],]); } |
2.视图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{{--筛选组件开始--}} <div class="row"> <form action="{{ route('products.index') }}" class="form-inline search-form"> <input type="text" class="form-control input-sm" name="search" placeholder="搜索"> <button class="btn btn-primary btn-sm">搜索</button> <select name="order" class="form-control input-sm pull-right"> <option value="">排序方式</option> <option value="price_asc">价格从低到高</option> <option value="price_desc">价格从高到低</option> <option value="sold_count_desc">销量从高到低</option> <option value="sold_count_asc">销量从低到高</option> <option value="rating_desc">评价从高到低</option> <option value="rating_asc">评价从低到高</option> </select> </form> </div> {{--筛选组件结束--}} |