translatableStringHelper = $translatableStringHelper; } /** * @Route( * "{_locale}/postalcode/search" * ) * * @return JsonResponse */ public function searchAction(Request $request) { $pattern = $request->query->getAlnum('q', ''); if (empty($pattern)) { return new JsonResponse(['results' => [], 'pagination' => ['more' => false]]); } $query = $this->getDoctrine()->getManager() ->createQuery( sprintf( 'SELECT p.id AS id, p.name AS name, p.code AS code, ' . 'country.name AS country_name, ' . 'country.countryCode AS country_code ' . 'FROM %s p ' . 'JOIN p.country country ' . 'WHERE LOWER(p.name) LIKE LOWER(:pattern) OR LOWER(p.code) LIKE LOWER(:pattern) ' . 'ORDER BY code', PostalCode::class ) ) ->setParameter('pattern', '%' . $pattern . '%') ->setMaxResults(30); $results = array_map(function ($row) { $row['country_name'] = $this->translatableStringHelper->localize($row['country_name']); $row['text'] = $row['code'] . ' ' . $row['name'] . ' (' . $row['country_name'] . ')'; return $row; }, $query->getResult(Query::HYDRATE_ARRAY)); return new JsonResponse(['results' => $results, 'pagination' => ['more' => false]]); } }