Utilizará el matching con criteria donde los parámetros filters realizarán "field like %value%". */ public function cgetAction(ParamFetcherInterface $paramFetcher) { $em = $this->getDoctrine()->getManager(); $filters = !is_null($paramFetcher->get('filters')) ? $paramFetcher->get('filters') : array(); if (isset($filters['tenancy_id'])) { // tengo que buscar por tenencia. $tenancyService = $this->container->get('base_tenancy.tenancy_service'); $tenancyService->setTenancy($filters['tenancy_id']); unset($filters['tenancy_id']); } if (isset($filters['qb-criteria'])) { try { unset($filters['qb-criteria']); $criteria = new \Doctrine\Common\Collections\Criteria(); foreach ($filters as $field => $value) { $criteria->andWhere($criteria->expr()->contains("$field", "$value")); } if (!is_null($paramFetcher->get('offset'))) { $criteria->setFirstResult($paramFetcher->get('offset')); } if (!is_null($paramFetcher->get('limit'))) { $criteria->setMaxResults($paramFetcher->get('limit')); } if ($paramFetcher->get('order_by')) { $order_by = $paramFetcher->get('order_by'); $orderBy = array(); foreach ($order_by as $field => $order) { $orderBy[$field] = $order; } $criteria->orderBy($orderBy); } $repo = $em->getRepository($this->getRepository()); $entities = $repo->matching($criteria)->toArray(); if ($entities) { return $entities; } } catch (\Exception $e) { return FOSView::create($e->getMessage(), Codes::HTTP_INTERNAL_SERVER_ERROR); } } else { try { $offset = $paramFetcher->get('offset'); $limit = $paramFetcher->get('limit'); $order_by = $paramFetcher->get('order_by'); $entities = $em->getRepository($this->getRepository())->findBy($filters, $order_by, $limit, $offset); if ($entities) { return $entities; } } catch (\Exception $e) { return FOSView::create($e->getMessage(), Codes::HTTP_INTERNAL_SERVER_ERROR); } } return array(); } }