/** * Return a paginated list of projects * * @return \Dingo\Api\Http\Response */ public function index() { $projects = Project::paginate(app('request')->get('per_page', 10)); $queryParams = array_diff_key($_GET, array_flip(['page'])); $projects->appends($queryParams); return $this->response->paginator($projects, new ProjectTransformer()); }
public function projects($search = null, $categories = null, $orderby = null, $paginate = true) { $result = null; /** * As buscas não são complementares: ou se filtra por termo ou por categoria(s) * mas nunca por ambos. */ if ($paginate) { /** * SEARCH * Se existe um termo de busca, retorna a lista filtrada pelo termo */ if (!is_null($search) && !empty($search)) { return Project::where('name', 'like', "%{$search}%")->paginate(env('PAGINATION_ITEMS', 10)); } /** * CATEGORIES * Se existe uma ou mais categoria(s), retorna a lista filtrada por ela(s) */ if (!is_null($categories) && !empty($categories)) { /** * Compila-se uma lista distinta projetos associados às caregorias informadas */ $projectsFromCategories = DB::table('category_project')->whereIn('category_id', $categories)->distinct()->get(['project_id']); $projectIds = []; /** * Compila-se uma lista apenas com os IDs dos projetos pois * a lista acima possui array com objetos: [0 => StdClass('project_id': 1)] */ foreach ($projectsFromCategories as $value) { $projectIds[] = $value->project_id; } /** * Por fim retorna-se a lista dos projetos */ return Project::whereIn('id', $projectIds)->paginate(env('PAGINATION_ITEMS', 10)); } /** * ORDER BY * Se existe ordenação, retorna a lista ordenada pela instrução recebida */ if (!is_null($orderby) && !empty($orderby)) { $order = explode('|', $orderby); return Project::orderBy($order[0], $order[1])->paginate(env('PAGINATION_ITEMS', 10)); } /** * Caso nem exista nem termo de busca nem categorias, retorna-se a lista completa, paginada. */ return Project::paginate(env('PAGINATION_ITEMS', 10)); } /** * Este, sem paginação, visa atender à API */ return Project::where('name', 'like', "%{$search}%")->get(); }