Применить фильтр Laravel Nova к вычисляемому значению - PullRequest
0 голосов
/ 16 октября 2018

У меня есть ресурс 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 Ответ

0 голосов
/ 17 октября 2018

Вы можете попытаться получить значение фильтров из запроса:

$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"
    ]
  ]
}
...