排序、搜索 代码片段

public function index(Request $request)
{
    // 创建一个查询构造器
    $builder = Product::query()->where('on_sale',true);
    // 判断是否有提交 search 参数,如果有就赋值给 $search 变量
    // search 参数用来模糊搜索商品
    if($search = $request->input('search','')){
        $like = '%'.$search.'%';
        // 模糊搜索商品标题、商品详情、SKU 标题、SKU描述
        $builder->where(function ($query) use ($like){
            $query->where('title','like',$like)
                ->orWhere('description','like',$like)
                ->orWhereHas('skus',function ($query) use ($like){
                    $query->where('title','like',$like)
                        ->orWhere('description','like',$like);
                });
        });
    }
    // 是否有提交 order 参数,如果有就赋值给 $order 变量
    // order 参数用来控制商品的排序规则
    if($order = $request->input('order','')){
        // 是否是以 _asc 或者 _desc 结尾
        if (preg_match('/^(.+)_(asc|desc)$/', $order, $m)) {
            // 如果字符串的开头是这 3 个字符串之一,说明是一个合法的排序值
            if (in_array($m[1], ['price', 'sold_count', 'rating'])) {
                // 根据传入的排序值来构造排序参数
                $builder->orderBy($m[1], $m[2]);
            }
        }

    }
    $products = $builder->paginate(16);


    return view('products.index', ['products' => $products, 'filters'  => [
        'search' => $search,
        'order'  => $order,
    ],]);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值