Bonsoir, avis au pro de symfony2, je n'arrive pas à enregistrer correctement
une donnée déjà existant.
je vais essayer de l'expliquer car c'est pas simple et je mélange un peu les pinceaux.

voici 3 tables
Code console : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
CONTACT
------------
id|nom|prenom

Code console : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
METIER
-------------
id|actvite
1|plombier
2|menusier

Code console : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
CONTACT-METIER
---------------------
id_contact |id_activite

un contact peut posséder 1 ou plusieurs activités, c'est pour cela que j'ai
une table contact-metier

sous le répertoire entité de symfony2 j'ai donc 2 entité
entité contact
entité metier

les 2 entité on donc un relation ManyToMany
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
class Contact
 * @ORM\ManyToMany(targetEntity="Kod\CommercialBundle\Entity\Metier",cascade={"persist"})

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
class Metier
 * @ORM\ManyToMany(targetEntity="Kod\AnnuaireBundle\Entity\Contact",cascade={"persist"})
j'ai donc un formulaire de contact qui me permet d'ajouter
plusieurs métiers.

Pour éviter des doublons dans la table métier j'ai mis une contraint unique dans le nom de l'activité.

Mon problème est que maintenant que j'ai mis cette contrainte dans mon formulaire , si j'ai un deuxième contact qui a comme activité métier plombier par exemple, le formulaire m'indique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
This value is already used
du coup l'enregistrement de mon contact et de leurs métiers ne peuvent pas être enregistrer

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
    public function process()
    {
        if($this->request->getMethod()=='POST')
        {
            $this->form->bindRequest($this->request);
 
            if($this->form->isValid())
            {
                $this->onSuccess($this->form->getData());//enregistrement flush()
                return true;
            }
        }
        return false;
    }

si je mets une activité inconnue, ma condition if($this->form->isValide()) est
acceptée

si je mets une activité connu le plombier, ma condition if est refusé,
l'enregistrement ne se fait pas.

Pourquoi form->isValide n'est pas valide ? que faut t'il faire pour que je fasse en sorte qu'il soit valide ?

j'espère que j'ai au mieux expliquer mon problème?

voici mon formbuilder
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
<?php
 
namespace Kod\AnnuaireBundle\Form;
 
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Kod\CommercialBundle\Form\MetierType;
 
class ContactType extends AbstractType
{
    public function buildForm(FormBuilder $builder,array $options)
    {
        $builder
        ->add('nom')
        ->add('prenom')
        ->add('email')
        ->add('sexe', 'choice', array('choices' => array('F'=>'Féminin','M'=>'Masculin')))
        ->add('phones','collection', array(
		'type'=> new PhoneType(),
        'prototype'=> true,
        'allow_add'=> true))          
        ->add('adresses','collection', array(
		'type'=> new AdresseType(),
        'prototype'=> true,
        'allow_add'=> true))
        ->add('metiers','collection', array(
		'type'=> new MetierType(),
        'prototype'=> true,
        'allow_add'=> true)) 
 
            ;   
    }
 
    public function getName()
    {
        return 'kod_annuaire_contacttype';
    }
 
    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class'=>'Kod\AnnuaireBundle\Entity\Contact',
        );
    }
}
 
?>
Je vous remercie d'avance pour la réponse et de votre coup de main