Настройте результат базы данных [Symfony 4] - PullRequest
0 голосов
/ 12 марта 2019

У меня есть форма поиска, которую я хочу, например, поиск по категории, диплому, salaire,

Категория, диплом работает хорошо, но моя проблема в salaire (тип float), когда форма salaire пуста, я хочуЗапрос возвращает все результаты категории, диплома и игнорирует salaire

, а когда форма salaire не равна нулю, я хочу, чтобы запрос возвращал результат категории + диплома + список salaire

этот контроллер

$data = $form->getData();
            $repository = $this->getDoctrine()->getRepository(Candidat::class);
            $candidats = $repository->findListByFilter($data->getCategorie(),$data->getDiplome(),$data->getSalaire());

Это хранилище

     public function findListByFilter($categorie,$diplome,$salaire):array
        {

            return $this->createQueryBuilder('c')
                ->andWhere('c.categorie = :categorie')
                ->andWhere('c.diplome = :diplome')
                ->andWhere('c.salaire <= :salaire')
                ->setParameter('categorie', $categorie)
                ->setParameter('diplome', $diplome)
                ->setParameter('salaire', $salaire)
                ->getQuery()
                ->getResult()
                ;
}

1 Ответ

1 голос
/ 12 марта 2019

Я рекомендую вам использовать IFs для выполнения такого запроса:

public function findListByFilter(string $categorie, string $diplome, ?float $salaire = null): array
{
    $qb = $this->createQueryBuilder('c')
        ->where('c.categorie = :categorie')
        ->andWhere('c.diplome = :diplome')
        ->setParameters([
            'categorie' => $categorie,
            'diplome' => $diplome
        ]);

    if($salaire) {
        $qb->andWhere('c.salaire <= :salaire')->setParameter('salaire', $salaire);
    }

    return $qb->getQuery->getResult();
}

Вы используете Symfony 4, поэтому я рекомендую вам начать использовать подсказку типа для ваших переменных.

...