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