private function addFilters(ResourceQueryBuilder $builder, array $criteria, array $roles = null) { if ($roles) { $builder->whereHasRoleIn($roles); } $filterMethodMap = array('types' => 'whereTypeIn', 'roots' => 'whereRootIn', 'dateFrom' => 'whereDateFrom', 'dateTo' => 'whereDateTo', 'name' => 'whereNameLike', 'isExportable' => 'whereIsExportable'); $allowedFilters = array_keys($filterMethodMap); foreach ($criteria as $filter => $value) { if ($value !== null) { if (in_array($filter, $allowedFilters)) { $builder->{$filterMethodMap[$filter]}($value); } else { throw new UnknownFilterException("Unknown filter '{$filter}'"); } } } return $builder; }