Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Je suit l'excellente formation Symfony ici proposée, et j'ai un petit soucis (non bloquant) au moment de la recherche par filtre (Vidéo 8/12 Filtrer les biens)
J'ai détourner un filtre de recherche en paramétrant le ChoiceType présent dans le PropertySearchType comme pour le PropertyType.

class AnimalSearchType extends AbstractType

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('maxAge', IntegerType::class, [
                'required' => false,
                'label' => false,
                'attr' => [
                    'placeholder' => ' Quel âge ? ',
                    'min' => 0
                ]
            ])
            ->add('type', ChoiceType::class, [
                'choices' => $this->getChoices()
        ]);
    }

    private function getChoices()
    {
        $choices = Animal::TYPE;
        $output = [];
        foreach ($choices as $k => $v) {
            $output[$v] = $k;
        }
        return $output;
    }

    /////////

    class Animal
{
    const TYPE = [
        0 => 'Chat',
        1 => 'Chien',
        2 => 'Rongeur',
        etc.....

    /////////

    class AnimalRepository extends ServiceEntityRepository
    {
        /**
         * @param AnimalSearch $search
         * @return Query
         */
        public function findAllUnadoptedQuery(AnimalSearch $search): Query
        {
            $query = $this->findUnadoptedQuery();

            if ($search->getMaxAge()) {
                $query = $query->andWhere('a.age <= :maxage')->setParameter('maxage', $search->getMaxAge());
            }
            if ($search->getType()) {
                $query = $query->andWhere('a.type >= :type')->setParameter('type', $search->getType());
            }

            return $query->getQuery();
        }

Ce que je veux

Vous l'aurez compris, le formulaire de recherche doit retrouver des animaux selon leurs âge maximum et leur race, seulement voilà,
le filtre marche très bien, aucun soucis, quand je renseigne la valeurs chien dans l'input ChoiceType, la requête SQL se fait bien avec le type = 1, et me retourne tout les chiens présent en BDD, magnifique, pareil avec la valeur type = 2 etc... Malheureusement, la valeur par défaut étant Chat (type = 0), la requête ne se fait pas, il ne prends même pas en compte la requête SQL.

Ce que j'obtiens

Voila ce que me donne la chaine de requête : http://localhost:8000/animals?maxAge=10&type=0

Et la requête SQL dans le profiler Symfony m'affiche bien la requête pour l'age mais rien pour le type.

Quelqu'un aurait une astuce pour moi siouplé?

Merci a vous pour votre temps

2 réponses


Balbert
Réponse acceptée

il te faut faire ceci :

if(!is_null($search->getType()))
   $query = $query->andWhere('a.type = :type')->setParameter('type', $search->getType());

Je suis honteux de te laisser sans réponses ni remerciements après autant de temps...
Merci ENORMEMENT, tu as résolu mon problème !
Et sincèrement desolé !

Grâce à toi je peux reprendre :)