Bonsoir à tous,
Je souhaite réaliser mon premier "ManyToMany" de la manière la plus simple qui soit mais je n'y parviens pas, même en suivant un tutoriel. :-/
J'ai une entité "Coproprietaire" qui contient juste un ID et une collection de lots : chaque lot peut-être attribué à plusieurs copropriétaires, donc ManyToMany.
Entité Copropriétaire :
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
78
79
80
81
82
83 <?php namespace LogicielBundle\Entity\Copropriete; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; use Entity\Traits\Identite; /** * Coproprietaire * * @ORM\Table("copropriete_coproprietaire") * @ORM\Entity(repositoryClass="LogicielBundle\Repository\Copropriete\CoproprietaireRepository") */ class Coproprietaire { use Identite; /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\ManyToMany(targetEntity="LogicielBundle\Entity\Lot", cascade={"persist"}) */ private $lots; /** * Constructor */ public function __construct() { $this->lots = new ArrayCollection(); } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Add lots * * @param \LogicielBundle\Entity\Lot $lots * @return Coproprietaire */ public function addLot(\LogicielBundle\Entity\Lot $lots) { $this->lots[] = $lots; return $this; } /** * Remove lots * * @param \LogicielBundle\Entity\Lot $lots */ public function removeLot(\LogicielBundle\Entity\Lot $lots) { $this->lots->removeElement($lots); } /** * Get lots * * @return \Doctrine\Common\Collections\Collection */ public function getLots() { return $this->lots; } }
Ensuite, dans mon controlleur, je fais appel à un formulaire permettant d'ajouter un nouveau lot, puisqu'on part du principe que le copropriétaire est déjà existant :
Controlleur (je vous épargne tout le code, mais le formulaire s'affiche correctement) :
Et enfin le formulaire en lui même, qui, comme vous l'avez peut-être vu, est appelé via. le service "logiciel_copropriete_coproprietaire_lot_form" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $coproprietaire = $this->getCoproprietaire($id); $form = $this->createForm('logiciel_copropriete_coproprietaire_lot_form', $coproprietaire); $this->submit($form); if ($form->handleRequest($request)->isValid()) { $em = $this->getDoctrine()->getManager(); $em->flush(); echo 'ok'; }
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 <?php namespace LogicielBundle\Form\Copropriete; use LogicielBundle\Repository\LotRepository; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; class CoproprietaireLotType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('lots', 'entity', array( 'class' => 'LogicielBundle:Lot', 'query_builder' => function(LotRepository $repository) { return $repository->getLotsForm('1'); } )); } /** * @param OptionsResolverInterface $resolver */ public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'LogicielBundle\Entity\Copropriete\Coproprietaire', 'intention' => $this->getName() . '_token' )); } /** * @return string */ public function getName() { return 'logiciel_copropriete_coproprietaire_lot_form'; } }
Tout s'affiche correctement, y compris le formulaire. Mais lorsque je valide, je tombe sur cette erreur : " Neither the property "lots" nor one of the methods "addLot()"/"removeLot()", "setLots()", "lots()", "__set()" or "__call()" exist and have public access in class "LogicielBundle\Entity\Copropriete\Coproprietaire". " ; je ne comprends vraiment pas car comme vous le voyez, ces fonctions existent dans mon entité. :-/
Merci d'avance à ceux qui pourront m'aider![]()
Partager