Bonjour, j'envisage de créer un site Ecommerce et je commence a créer mes classe php Un panier, des ligne de commande, Commande, commande client,

j'utilise les héritage
PANIER et COMMANDECLIENT sont des classe fille qui hérite de COMMANDE car il ont des attribut propre a eux.

Donc COMMANDE a une collection de ligne de commande (getLigneDeCommand[])

Je veux utilisé getLigne de commande dans commandeclient et panier

voici mes classe

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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
 
<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
namespace Ecommerce\CommandeBundle\Entity;
 
 
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Ecommerce\CommandeBundle\Entity\Commande;
 
 
 
/**
* @ORM\Entity
*/
class ClientCommande extends Commande{
 
 
/**
* @ORM\Id
* @ORM\Column(type="integer")
*/
private $id;
 
 
/**
* @ORM\ManyToOne(targetEntity="Client")
*/
private $leClient;
 
 
 
/**
* @ORM\Column(type="date")
*/
private $date;
 
 
 
 
 
    /**
     * Set date
     *
     * @param \DateTime $date
     * @return ClientCommande
     */
    public function setDate($date)
    {
        $this->date = $date;
 
        return $this;
    }
 
    /**
     * Get date
     *
     * @return \DateTime 
     */
    public function getDate()
    {
        return $this->date;
    }
 
    /**
     * Set id
     *
     * @param Ecommerce\CommandeBundle\Entity\Commande $id
     * @return ClientCommande
     */
    public function setId(\Ecommerce\CommandeBundle\Entity\Commande $id = null)
    {
        $this->id = $id;
 
        return $this;
    }
 
    /**
     * Get id
     *
     * @return Ecommerce\CommandeBundle\Entity\Commande 
     */
    public function getId()
    {
        return $this->id;
    }
 
    /**
     * Set leClient
     *
     * @param Ecommerce\CommandeBundle\Entity\Client $leClient
     * @return ClientCommande
     */
    public function setLeClient(\Ecommerce\CommandeBundle\Entity\Client $leClient = null)
    {
        $this->leClient = $leClient;
 
        return $this;
    }
 
    /**
     * Get leClient
     *
     * @return Ecommerce\CommandeBundle\Entity\Client 
     */
    public function getLeClient()
    {
        return $this->leClient;
    }
}
--------------------------------------------------------------------------
<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 
namespace Ecommerce\CommandeBundle\Entity;
 
 
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
 
 
/**
* @ORM\Entity
*/
class PanierCommande extends Commande{
/**
     * @ORM\OneToOne(targetEntity="Commande")
     * @ORM\JoinColumn(name="", referencedColumnName="id")
*/
private $id;
 
/**
* @ORM\ManyToOne(targetEntity="Client")
*/
private $leClient;
 
 
    /**
     * Set id
     *
     * @param Ecommerce\CommandeBundle\Entity\Commande $id
     * @return PanierCommande
     */
    public function setId(\Ecommerce\CommandeBundle\Entity\Commande $id = null)
    {
        $this->id = $id;
 
        return $this;
    }
 
    /**
     * Get id
     *
     * @return Ecommerce\CommandeBundle\Entity\Commande 
     */
 
     public function getId()
    {
        return parent::getId();
    }
 
 
    /**
     * Set leClient
     *
     * @param Ecommerce\CommandeBundle\Entity\Client $leClient
     * @return PanierCommande
     */
    public function setLeClient(\Ecommerce\CommandeBundle\Entity\Client $leClient = null)
    {
        $this->leClient = $leClient;
 
        return $this;
    }
 
    /**
     * Get leClient
     *
     * @return Ecommerce\CommandeBundle\Entity\Client 
     */
    public function getLeClient()
    {
        return $this->leClient;
    }
 
    /**
     * Set fdfdd
     *
     * @param Ecommerce\CommandeBundle\Entity\Commande $fdfdd
     * @return PanierCommande
     */
    public function setFdfdd(\Ecommerce\CommandeBundle\Entity\Commande $fdfdd = null)
    {
        $this->fdfdd = $fdfdd;
 
        return $this;
    }
 
    /**
     * Get fdfdd
     *
     * @return Ecommerce\CommandeBundle\Entity\Commande 
     */
    public function getFdfdd()
    {
        return $this->fdfdd;
    }
 
}
------------------------------------------------------------------------
<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
namespace Ecommerce\CommandeBundle\Entity;
 
 
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
 
 
/**
 * Ecommerce\CommandeBundle\Entity\Commande;
 *
 * @ORM\Table()
 * @ORM\Entity
 *
 */
class Commande {
 
 
 
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
 
 
 
 
 
 /**
     * Bidirectional - One-To-Many (INVERSE SIDE)
     *
     * @ORM\OneToMany(targetEntity="Ligne", mappedBy="laCommande")
     */
private $lignesDeCommande;
 
 
 
 
 
    /**
     * Constructor
     */
    public function __construct()
    {
        $this->lignesDeCommande = new \Doctrine\Common\Collections\ArrayCollection();
    }
 
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
 
    /**
     * Add lignesDeCommande
     *
     * @param Ecommerce\CommandeBundle\Entity\Ligne $lignesDeCommande
     * @return Commande
     */
    public function addLignesDeCommande(\Ecommerce\CommandeBundle\Entity\Ligne $lignesDeCommande)
    {
        $this->lignesDeCommande[] = $lignesDeCommande;
 
        return $this;
    }
 
    /**
     * Remove lignesDeCommande
     *
     * @param Ecommerce\CommandeBundle\Entity\Ligne $lignesDeCommande
     */
    public function removeLignesDeCommande(\Ecommerce\CommandeBundle\Entity\Ligne $lignesDeCommande)
    {
        $this->lignesDeCommande->removeElement($lignesDeCommande);
    }
 
    /**
     * Get lignesDeCommande
     *
     * @return Doctrine\Common\Collections\Collection 
     */
    public function getLignesDeCommande()
    {
        return $this->lignesDeCommande;
    }
}
--------------------------------------------------------------------------
<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
namespace Ecommerce\CommandeBundle\Entity;
 
 
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
 
 
/**
* @ORM\Entity
*/
class Ligne{
/**
* @ORM\GeneratedValue
* @ORM\Id
* @ORM\Column(type="integer")
*/
private $id;
 
 
 
/**
     * Bidirectional - Many Comments are authored by one user (OWNING SIDE)
     *
     * @ORM\ManyToOne(targetEntity="Commande", inversedBy="ligneDeCommande")
     */
private $laCommande;
 
 
 
/**
* @ORM\ManyToOne(targetEntity="\Ecommerce\CatalogueBundle\Entity\Produit")
*/
private $leProduit;
 
 
 
 
/**
* @ORM\Column(type="decimal",scale=2)
*/
private $prix;
 
 
 
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
 
    /**
     * Set prix
     *
     * @param float $prix
     * @return Ligne
     */
    public function setPrix($prix)
    {
        $this->prix = $prix;
 
        return $this;
    }
 
    /**
     * Get prix
     *
     * @return float 
     */
    public function getPrix()
    {
        return $this->prix;
    }
 
    /**
     * Set laCommande
     *
     * @param Ecommerce\CommandeBundle\Entity\Commande $laCommande
     * @return Ligne
     */
    public function setLaCommande(\Ecommerce\CommandeBundle\Entity\Commande $laCommande = null)
    {
        $this->laCommande = $laCommande;
 
        return $this;
    }
 
    /**
     * Get laCommande
     *
     * @return Ecommerce\CommandeBundle\Entity\Commande 
     */
    public function getLaCommande()
    {
        return $this->laCommande;
    }
 
    /**
     * Set leProduit
     *
     * @param Ecommerce\CatalogueBundle\Entity\Produit $leProduit
     * @return Ligne
     */
    public function setLeProduit(\Ecommerce\CatalogueBundle\Entity\Produit $leProduit = null)
    {
        $this->leProduit = $leProduit;
 
        return $this;
    }
 
    /**
     * Get leProduit
     *
     * @return Ecommerce\CatalogueBundle\Entity\Produit 
     */
    public function getLeProduit()
    {
        return $this->leProduit;
    }
}

et le UML POUR VOIR PLUS CLAIRE

j'ai fait mes relations entre mes classes, mais mon probléme vient de l'héritage, je voudrais que seulement la table commande a un ID qui serait le même que ses classe fille.

Pour que dans mon controleur quand j'interoge mon entité COMMANDECLIENT, je puisse avoir mon objet getLigneDeCommande en passant par la classe mére.

$em = $this->getDoctrine()->getEntityManager();

$commandeClient = $em->getRepository('EcommerceCommandeBundle:ClientCommande')->find(1);//identifiant de la classe commande hérité dans la classe client commande
foreach($commandeClient->getLignesDeCommande()as $ligne)
{
var_dump($ligne);exit;
}

An exception occurred while executing 'SELECT t1.id AS id2, t1.date AS date3, t1.leClient_id AS leClient_id4 FROM ClientCommande t1 WHERE t0.id = ?' with params {"1":1}:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 't0.id' in 'where clause'

merci me m'éguillet, car des personne dise de mettre des clé etrangéré sur les identifiant, pour faire des relation entre les classes mais alors le principe d'héritage ne sert plus dans ces cas la , c'est juste des relation traditionnel(1,1)vers COMMANDE