Symfony - добавление дополнительного поля вручную - PullRequest
0 голосов
/ 13 июня 2018

Я написал запрос, чтобы вернуть все данные из БД. Теперь мне нужно добавить еще одно поле.API-вызов должен получить одно дополнительное поле - «термин».По истечении срока, результаты фильтруются в соответствии с этим термином.

Моя служба.

/**
 * Return all schools from city
 *
 * @param int $limit
 * @param int $offset
 * @return array
 */
public function getCityPaginated($limit = 20, $offset = 0)
{

    $query = $this->getCityRepository()
        ->createQueryBuilder('c')
        ->getQuery();

    return $this->container->get('paginator')->paginate($query, $offset, $limit);
}

Мой контроллер ..

/**
 * @Route("/cities", name="city_list")
 * @throws \Doctrine\Common\Annotations\AnnotationException
 */
public function getCityPaginatedAction()
{
    if(isset($this->data['offset'])){
        $offset = $this->data['offset'];
    }else {
        $offset = 0;
    }

    if(isset($this->data['limit'])){
        $limit = $this->data['limit'];
    }else{
        $limit = 20;
    }

    $city = $this->get('city')->getCityPaginated($limit, $offset);

    return $this->success($city, ['city_data']);
}

Ответы [ 2 ]

0 голосов
/ 16 июля 2018

Измените контроллер так, чтобы вы прочитали параметр term из запроса и передали его в метод обслуживания:

/**
 * @Route("/cities", name="city_list")
 * @param Request $request
 * @throws \Doctrine\Common\Annotations\AnnotationException
 */
public function getCityPaginatedAction(Request $request)
{
    if(isset($this->data['offset'])){
        $offset = $this->data['offset'];
    }else {
        $offset = 0;
    }

    if(isset($this->data['limit'])){
        $limit = $this->data['limit'];
    }else{
        $limit = 20;
    }

    $term = $request->query->get('term');
    $city = $this->get('city')->getCityPaginated($limit, $offset, $term);

    return $this->success($city, ['city_data']);
}

Затем измените службу, чтобы использовать этот параметр в запросе

/**
 * Return all schools from city
 *
 * @param int $limit
 * @param int $offset
 * @param string $text
 * @return array
 */
public function getCityPaginated($limit = 20, $offset = 0, $term = null)
{
    $queryBuilder = $this->getCityRepository()
        ->createQueryBuilder('c');

    if ($term) {
        $queryBuilder->andWhere($queryBuilder->expr()->like('c.name', :term)
            ->setParameter('term', "%" . $term . "%");
    }

    $query = $queryBuilder->getQuery();

    return $this->container->get('paginator')->paginate($query, $offset, $limit);
}

Возможно, вы захотите изменить конструктор запросов и выполнить поиск и в других полях.

0 голосов
/ 14 июня 2018

Если я правильно понимаю, вам нужно получить параметр POST?

public function getCityPaginatedAction(Request $request)
{
   $term = $request->request->get('term');
...