首页 > 解决方案 > 根据价格过滤器过滤产品(从到)

问题描述

我正在尝试根据价格过滤我的产品,使用视图中的表格,我作为两个单独的过滤器来回传递并从那里卡住。这是我的产品模型中的代码:

public function scopeFilter($query, array $filters)
{
   
    $query->when(
        $filters['from'] ?? false,
        function ($query,$request) {
            $query->whereBetween('price', [$request->from,$request->to]);
        }
    );
}

显然这不起作用,当我 dd 请求时,它只给了我“from”值。有任何想法吗??这是我的产品控制器:

public function index()
{        
    $categories = Category::get();
    $products = Product::latest()->filter(request(['category','from','to']))->simplePaginate(5);

    return view('welcome',compact('products','categories',));
}

目前它给了我一个错误“试图让非对象的属性'to'”

标签: laravel

解决方案


你读错了请求,你的范围过滤功能应该是这样的:

public function scopeFilter($query, array $filters)
    {
        $query->when(
            ($filters['from'] && $filters['to']) ?? false,
            function ($query) use ($filters){
                $query->whereBetween('price', [$filters['from'],$filters['to']]);
            }
        );
    }

推荐阅读