Мне понравилось вот это решение:
https://packagist.org/packages/kblais/query-filterВ контроллере по сути 1 запрос
public function index(Request $request, FilmFilters $filters)
{
$films = Film::filter($filters)->paginate(36);
$films = $films->toArray();
return Response::json($films);
А количество фильтров расширить легко за счет расширения класса.
<?php
namespace Filmpic\Films\Classes;
use Filmpic\Films\Classes\QueryFilter;
class FilmFilters extends QueryFilter
{
public function type(string $type)
{
return $this->builder->where('type', strtolower($type));
}
public function year(string $year)
{
return $this->builder->where('year', strtolower($year));
}
}