IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Symfony 2/doctrine2 formulaire de recherche par choix multiple [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    developpeur analyste fonctionnel
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : developpeur analyste fonctionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 58
    Points
    58
    Par défaut Symfony 2/doctrine2 formulaire de recherche par choix multiple
    Bonjour à tous,

    J'ai pas trouvé ma solution même sur le forum donc je post ce sujet :

    j'ai une recherche de base pour mon formulaire dont j'ai ajouté des checkbox multiples.

    Lorsque je sélectionne un checkbox, cela fonctionne.Par contre lorsque je sélectionne deux il me met cette erreur... et comme je débute ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [2/2]DBALException: An exception occurred while executing 'SELECT j0_.id AS id0, j0_.intitule AS intitule1, j0_.categorie AS categorie2, j0_.type AS type3, j0_.adresse AS adresse4, j0_.remuneration AS remuneration5, j0_.date AS date6, j0_.description AS description7 FROM job j0_ WHERE j0_.type = ?, ?' with params ["bricolage", "informatique"]:
     
    SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 'informatique'' at line 1
    Je sais que c'est ma requete mais avec createQueryBuilder() je ne sais comment faire ... pourtant j'ai regardé les exemples et j'ai rien compris ... :-)

    Dans mon repository :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    public function findListArticles(){
         $qb = $this->_em->createQueryBuilder();
         return $qb->select('monjob')->from('LcMonjobBundle:Job', 'monjob');
    }
     
    public function findAnnonceByParametres($data)
        {
            $query = $this->createQueryBuilder('monjob');
     
            $query->where('monjob.type = :type')
     
                ->setParameters(array(
                    'type' => $data['type'],));
     
            return $query->getQuery()->getResult();
        }
    }
    Mon formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    public function buildForm(FormBuilderInterface $builder, array $options)
        {
     
    $builder
                ->add('intitule', 'text', array('label'=>'Mon intitule'))
                ->add('categorie')
                ->add('type', 'choice', array('expanded' => true, 'multiple' => true, 'choices' => array('bricolage' => 'bricolage', 'informatique' => 'informatique')))
                ->add('date')
                ->add('adresse')
                ->add('remuneration')
                ->add('description')
            ;
        }
     
        /**
         * @param OptionsResolverInterface $resolver
         */
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Lc\MonjobBundle\Entity\job'
            ));
        }
     
        /**
         * @return string
         */
        public function getName()
        {
            return 'lc_monjobbundle_job';
     
        }
    }
    Éventuellement ma fonction de mon controller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    public function jobSearchAction(){
    //$recupJob=$em->getRepository('LcMonjobBundle:Job')->findAll();
    //return $this->render('LcMonjobBundle:Default:voir.html.twig',array('recupJob'=>$recupJob,));
     
    $form = $this->createForm(new jobType());
        $request = $this->getRequest();
         if($request->getMethod() == 'POST')
            {
                $form->bind($request);
     
                //On vérifie que les valeurs entrées sont correctes
                if($form->isValid())
                {
                    $em = $this->getDoctrine()->getManager();
     
                    //On récupère les données entrées dans le formulaire par l'utilisateur
                    $data = $this->getRequest()->request->get('lc_monjobbundle_job');
     
                    //On va récupérer la méthode dans le repository afin de trouver toutes les annonces filtrées par les paramètres du formulaire
                    $recupJob = $em->getRepository('LcMonjobBundle:Job')->findAnnonceByParametres($data);
                    return $this->render('LcMonjobBundle:Default:listjobfind.html.twig', array('recupJob' => $recupJob,));
      }
            }
     
        return $this->render('LcMonjobBundle:Default:listjob.html.twig', array('form' => $form->createView()));
    }
    j'ai fait au plus simple, avec le fichier du repository au niveau de createQueryBuilder , et le formulaire ( ligne de choice ).

    merci d'avance

    lo

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2010
    Messages : 25
    Points : 34
    Points
    34
    Par défaut
    Bonjour!

    Tu utilises l'égalité pour ton WHERE ('monjob.type = :type'), ce qui explique que cela fonctionne pour un élément mais pas plusieurs.

    Remplace l'égalité par une inclusion et ça fonctionnera, comme ça (code non testé):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query->andWhere('monjob.type IN (:types)')
                  ->setParameter('types', $data['types']);

  3. #3
    Membre du Club
    Profil pro
    developpeur analyste fonctionnel
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : developpeur analyste fonctionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 58
    Points
    58
    Par défaut
    super !!! Cela fonctionne !!
    Un grand merci :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. undefined formulaire de recherche par pays et region
    Par deathart dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/10/2012, 13h06
  2. formulaire de recherche par mot partiel
    Par odidi dans le forum IHM
    Réponses: 7
    Dernier message: 10/08/2012, 10h08
  3. Formulaire de recherche par proximité
    Par vodasan dans le forum Langage
    Réponses: 6
    Dernier message: 09/01/2007, 16h02
  4. formulaire de consultation par choix de listbox
    Par questions dans le forum Access
    Réponses: 1
    Dernier message: 31/01/2006, 11h03
  5. [Formulaire] filtrer liste par choix dans autre liste
    Par vatounet dans le forum Access
    Réponses: 4
    Dernier message: 05/10/2005, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo