首页 文章

将Laravel Nova过滤器应用于计算值

提问于
浏览
1

我有一个Laravel Nova资源,它里面有一个名为views的计算值 . 我想添加一个Nova过滤器,它可以影响计算值的结果(不是查询本身),但无法弄清楚如何执行此操作 .

我的计算值如下所示:

Text::make('Views', function() {
    return $this->getViewsCount();
}),

我希望能够做到这样的事情:

Text::make('Views', function() {
    if(isset($filterValue)) {
        return $this->getViewsBetween($filterValue);
    } else {
        return $this->getViewsCount();
    }
}

1 回答

  • 1

    您可以尝试从请求中获取过滤器值:

    $queryFilters = $request->query('filters')
    

    参数是base64和json编码,所以你必须先解码它 . 看一下 Laravel\Nova\Http\Requests\DecodesFilters 作为参考 .

    您的计算字段可能如下所示:

    Text::make('Views', function () use ($request) {
    
        $queryFilters = $request->query('filters');
        $decodedFilters = collect(json_decode(base64_decode($queryFilters), true));
        $computed = $decodedFilters->map(function ($filter) {
            return $this->getViewsBetween($filter['value']);
        });
    
        if ($computed->isEmpty()) {
            return $this->getViewsCount();
        }
    
        return $computed->implode(',');
    })
    

    更新: $decodedFilters 保存所选过滤器的类和值 .

    Illuminate\Support\Collection {
      #items: array:1 [
        0 => array:2 [
          "class" => "App\Nova\Filters\UserType"
          "value" => "admin"
        ]
      ]
    }
    

相关问题