Bonjour à tous, j'ai un soucis avec le rendu de mes résultats suite à l'utilisation de la méthode findAll() dans mon controller.
j'ai deux entités Batiments.php et Typesactivite.php qui sont reliés par une relation ManyToMany. Jusque là rien de bien problématique. Si on raisonne en table, dans ma base de données SQl j'ai donc une table de pivot (batiments_typesactivite).
Et lorsque j'utilise la méthode findAll() sur l'entité correspondante, j'ai cette erreur sur ma page:
J'avoue ne pas comprendre réellement ce qu'il se passe.An exception has been thrown during the rendering of a template ("Catchable Fatal Error: Object of class Doctrine\ORM\PersistentCollection could not be converted to string in C:\wamp\www\Repository Bitbucket\repos\SymfonyGirusEnexgir\app\cache\dev\twig\bf\66\146a31a62bf6f2a549d2604fb5be9c4530ab760a10169af08e8a5b72e9ee.php line 120") in EnexgirGestionPatrimoinesBundle:Batiments:indexBatiments.html.twig at line 60.
Voici le code pour Batiments.php :
J'ai suivi la doc de Doctrine pour permettre à cette relation ManyToMany d'avoir une entité "owner" donc Batiments.php ici.
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177 class Batiments { /** * @var integer * * @ORM\Column(name="id", type="integer", nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var string * * @ORM\Column(name="referenceBatiment", type="string", length=150, nullable=false) */ private $referencebatiment; /** * @var string * * @ORM\Column(name="nom", type="string", length=150, nullable=true) */ private $nom; /** * @var \Ensembles * * @ORM\ManyToOne(targetEntity="Ensembles") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="ensembles_id", referencedColumnName="id") * }) */ private $ensembles; /** * @var \Doctrine\Common\Collections\Collection * * @ORM\ManyToMany(targetEntity="Typesactivite", inversedBy="batiments") * @ORM\JoinTable(name="batiments_typesactivite", * joinColumns={ * @ORM\JoinColumn(name="batiments_id", referencedColumnName="id") * }, * inverseJoinColumns={ * @ORM\JoinColumn(name="typesactivite_id", referencedColumnName="id") * } * ) */ private $typesactivite; /** * Constructor */ public function __construct() { $this->typesactivite = new \Doctrine\Common\Collections\ArrayCollection(); } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set referencebatiment * * @param string $referencebatiment * @return Batiments */ public function setReferencebatiment($referencebatiment) { $this->referencebatiment = $referencebatiment; return $this; } /** * Get referencebatiment * * @return string */ public function getReferencebatiment() { return $this->referencebatiment; } /** * Set nom * * @param string $nom * @return Batiments */ public function setNom($nom) { $this->nom = $nom; return $this; } /** * Get nom * * @return string */ public function getNom() { return $this->nom; } /** * Set ensembles * * @param \Enexgir\DatabaseBundle\Entity\Ensembles $ensembles * @return Batiments */ public function setEnsembles(\Enexgir\DatabaseBundle\Entity\Ensembles $ensembles = null) { $this->ensembles = $ensembles; return $this; } /** * Get ensembles * * @return \Enexgir\DatabaseBundle\Entity\Ensembles */ public function getEnsembles() { return $this->ensembles; } /** * Add typesactivite * * @param \Enexgir\DatabaseBundle\Entity\Typesactivite $typesactivite * @return Batiments */ public function addTypesactivite(\Enexgir\DatabaseBundle\Entity\Typesactivite $typesactivite) { $this->typesactivite[] = $typesactivite; return $this; } /** * Remove typesactivite * * @param \Enexgir\DatabaseBundle\Entity\Typesactivite $typesactivite */ public function removeTypesactivite(\Enexgir\DatabaseBundle\Entity\Typesactivite $typesactivite) { $this->typesactivite->removeElement($typesactivite); } /** * Get typesactivite * * @return \Doctrine\Common\Collections\Collection */ public function getTypesactivite() { return $this->typesactivite; } public function __toString() { return $this->nom; } }
Voici le code pour Typesactivite.php :
Ensuite dans mon controller (j'ai même essayer de faire des DQl etc etc etc) j'ai appelé la méthode findAll() sur l'entité Batiments.php, voici le code:
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106 class Typesactivite { /** * @var integer * * @ORM\Column(name="id", type="integer", nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var string * * @ORM\Column(name="type", type="string", length=150, nullable=false) */ private $type; /** * @var \Doctrine\Common\Collections\Collection * * @ORM\ManyToMany(targetEntity="Batiments", mappedBy="typesactivite") */ private $batiments; /** * Constructor */ public function __construct() { $this->batiments = new \Doctrine\Common\Collections\ArrayCollection(); } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set type * * @param string $type * @return Typesactivite */ public function setType($type) { $this->type = $type; return $this; } /** * Get type * * @return string */ public function getType() { return $this->type; } /** * Add batiments * * @param \Enexgir\DatabaseBundle\Entity\Batiments $batiments * @return Typesactivite */ public function addBatiment(\Enexgir\DatabaseBundle\Entity\Batiments $batiments) { $this->batiments[] = $batiments; return $this; } /** * Remove batiments * * @param \Enexgir\DatabaseBundle\Entity\Batiments $batiments */ public function removeBatiment(\Enexgir\DatabaseBundle\Entity\Batiments $batiments) { $this->batiments->removeElement($batiments); } /** * Get batiments * * @return \Doctrine\Common\Collections\Collection */ public function getBatiments() { return $this->batiments; } public function __toString() { return $this->type; } }
Et enfin, pour afficher le résultat dans un <table>, voici le code de ma twig indexBatiments.html.twig :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public function indexBatimentsAction() { $em=$this->getDoctrine()->getManager(); $batiment = $em->getRepository('EnexgirDatabaseBundle:Batiments')->findAll(); return $this->render('EnexgirGestionPatrimoinesBundle:Batiments:indexBatiments.html.twig', array('batiment' => $batiment, 'typeactivite' => $typeactivite )); }
Lorsque je veux afficher ces résultats, l'erreur est telle que je l'ai donné plus haut:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <tbody> {% for batiments in batiment %} <tr> <td>{{ batiments.referencebatiment }}</td> <td>{{ batiments.typesactivite }}</td> <td>{{ batiments.ensembles.parcsimmobilier }}</td> <td>{{ batiments.nom }}</td> <td>{{ batiments.ensembles }}</td> </tr> {% endfor %} </tbody>
Si l'un de vous peut m'éclairer, j'avoue ne plus savoir comment gérer ceci.An exception has been thrown during the rendering of a template ("Catchable Fatal Error: Object of class Doctrine\ORM\PersistentCollection could not be converted to string in C:\wamp\http://www.........\app\cache\dev\tw...8a5b72e9ee.php line 127") in EnexgirGestionPatrimoinesBundle:Batiments:indexBatiments.html.twig at line 60.
Merci d'avance.
Partager