Bonjour à tous,

Je rencontre quelques soucis dans la création d'un formulaire avec une relation ManyToMany avec attributs.

J'ai une entité Personne, qui peut avoir une ou plusieurs fonctions (entité Fonction).
En fait, dans le form que je suis en train de créer, j'aimerai qu'une personne puisse avoir qu'une seule fonction.

Une personne peut avoir plusieurs fonctions, mais seulement dans d'autres cas, pas celui-ci.

Voici mon entité Personne :
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
 
<?php
class Personne
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;
 
    /**
     * @var string $codecivilite
     *
     * @ORM\Column(name="codeCivilite", type="string", length=5, nullable=false)
     */
    private $codecivilite;
 
    /**
     * @var string $nom
     *
     * @ORM\Column(name="nom", type="string", length=50, nullable=false)
     */
    private $nom;
 
    /**
     * @var string $prenom
     *
     * @ORM\Column(name="prenom", type="string", length=50, nullable=false)
     */
    private $prenom;
 
    /**
     * @var string $mail
     *
     * @ORM\Column(name="mail", type="string", length=50, nullable=true)
     */
    private $mail;
 
    /**
     * @var string $telfixe
     *
     * @ORM\Column(name="telFixe", type="string", length=14, nullable=true)
     */
    private $telfixe;
 
    /**
     * @var string $telmobile
     *
     * @ORM\Column(name="telMobile", type="string", length=14, nullable=true)
     */
    private $telmobile;
 
    /**
     * @var date $datenaissance
     *
     * @ORM\Column(name="dateNaissance", type="date", nullable=true)
     */
    private $datenaissance;
 
    /**
     * @var datetime $datecreation
     *
     * @ORM\Column(name="dateCreation", type="datetime", nullable=false)
     */
    private $datecreation;
 
    /**
     * @var PersonneFonction
     *
     * @ORM\OneToMany(targetEntity="PersonneFonction", mappedBy="personne")
     *
     */
    private $personnefonction;    
}
Mon entité Fonction :
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
 
<?php
class Fonction
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;
 
    /**
     * @var string $nom
     *
     * @ORM\Column(name="nom", type="string", length=50, nullable=false)
     */
    private $nom;
 
	/**
     * @var Personne
     *
     * @ORM\OneToMany(targetEntity="PersonneFonction", mappedBy="fonction")
     *
     */
    private $personnefonction;
}
Mon entité PersonneFonction :
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
 
class PersonneFonction
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;
 
    /**
     * @var datetime $dateaffectation
     *
     * @ORM\Column(name="dateAffectation", type="datetime", nullable=false)
     */
    private $dateaffectation;
 
    /**
     * @var Fonction
     *
     * @ORM\ManyToOne(targetEntity="Fonction", inversedBy="personnefonction")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="idFonction", referencedColumnName="id")
     * })
     */
    private $fonction;
 
    /**
     * @var Personne
     *
     * @ORM\ManyToOne(targetEntity="Personne", inversedBy="personnefonction")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="idPersonne", referencedColumnName="id")
     * })
     */
    private $personne;
 
 
 
    public function  __construct()
    {
    	$this->dateaffectation = new \DateTime('NOW', new \DateTimeZone('Europe/Paris'));
    }
}
Mon problème est que je ne sais pas quoi mettre lors de mon buildForm, si c'est une FonctionType() ou une PersonneFonctionType(). Dois-je mettre un champ de type Collection ? Si oui je ne vois pas trop comment faire.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<?php
  public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('codecivilite', 'choice', array('choices' => array('m' => 'M.', 'mme' => 'Mme', 'melle' => 'Melle'), 'label' => ' '))
            ->add('dateNaissance', 'text', array('label' => 'Date de naissance : ', 'required' => false))
            ->add('nom', 'text', array('label' => 'Nom : (*) ' ))
            ->add('prenom', 'text', array('label' => 'Prénom : (*) '))
            ->add('mail', 'email', array('label' => 'Adresse mail : (*) '))
            ->add('telfixe', 'text', array('label' => 'Téléphone : ', 'max_length' => 10))
            ->add('telmobile', 'text', array('label' => 'Mobile : ', 'required' => false, 'max_length' => 10))
        ;
    }