Pour te répondre, c’est sûrement dû au fait que pour moi, la base de données sert de base et que les entités se basent là-dessus et pas le contraire.
Enfin bref, j’avance gentiment mais j’ai encore quelques soucis. J’essaie de mettre en place l’héritage.
Dans ma base de données, cela ressemble à ceci :
Table marchandises : id_marc, prix_marc
Table produit : id_prod, fk_cat (catégorie du produit), fk_type (type de produit), fk_marq (Marque du produit), libelle_prod, description_prod, qte_prod, fk_med (image reliée), fk_marc (relié à la table marchandises)
Table prestation : id_prestation, fk_art (relié à une table article), libelle_serv, description_serv, fk_marc (même champ que la table produits).
Marchandises.php
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 | <?php
namespace MPCleanCoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Marchandises
*
* @ORM\Table(name="marchandises", uniqueConstraints={@ORM\UniqueConstraint(name="ind_id_marc", columns={"id_marc"})})
* @ORM\Entity
* @ORMInheritance("JOINED")
* @ORMDiscriminatorColumn(name = "type", type = "string")
* @ORMDiscriminatorMap({"prestation" = "Prestation", "produit" = "Produit"})
*/
abstract class Marchandises
{
/**
* @var string
*
* @ORM\Column(name="prix_marc", type="decimal", precision=10, scale=0, nullable=false)
*/
private $prixMarc;
/**
* @var integer
*
* @ORM\Column(name="id_marc", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $idMarc;
}
|
Produit.php
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 | <?php
namespace MPCleanCoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Produit
*
* @ORM\Table(name="produit", uniqueConstraints={@ORM\UniqueConstraint(name="ind_id_produit", columns={"id_prod"})}, indexes={@ORM\Index(name="produit_marchandise", columns={"fk_marc"}), @ORM\Index(name="ind_fk_media", columns={"fk_med"}), @ORM\Index(name="ind_fk_cat", columns={"fk_cat"}), @ORM\Index(name="ind_fk_type", columns={"fk_type"}), @ORM\Index(name="ind_fk_marq", columns={"fk_marq"})})
* @ORM\Entity
*/
class Produit extends Marchandises
{
/**
* @var integer
*
* @ORM\Column(name="fk_cat", type="integer", nullable=false)
*/
private $fkCat;
/**
* @var integer
*
* @ORM\Column(name="fk_type", type="integer", nullable=false)
*/
private $fkType;
/**
* @var integer
*
* @ORM\Column(name="fk_marq", type="integer", nullable=false)
*/
private $fkMarq;
/**
* @var string
*
* @ORM\Column(name="libelle_prod", type="text", length=255, nullable=false)
*/
private $libelleProd;
/**
* @var string
*
* @ORM\Column(name="description_prod", type="text", length=255, nullable=false)
*/
private $descriptionProd;
/**
* @var integer
*
* @ORM\Column(name="qte_prod", type="integer", nullable=false)
*/
private $qteProd;
/**
* @var integer
*
* @ORM\Column(name="id_prod", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $idProd;
/**
* @var \MPCleanCoreBundle\Entity\Media
*
* @ORM\ManyToOne(targetEntity="MPCleanCoreBundle\Entity\Media")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="fk_med", referencedColumnName="id_med")
* })
*/
private $fkMed;
/**
* @var \MPCleanCoreBundle\Entity\Produit
*
* @ORM\ManyToOne(targetEntity="MPCleanCoreBundle\Entity\Marchandises")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="fk_marc", referencedColumnName="id_marc")
* })
*/
private $fkMarc;
}
|
Prestation.php
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 | <?php
namespace MPCleanCoreBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Prestation
*
* @ORM\Table(name="prestation", indexes={@ORM\Index(name="marchandise_prestation", columns={"fk_marc"}), @ORM\Index(name="marchandise_article", columns={"fk_art"})})
* @ORM\Entity
*/
class Prestation extends Marchandises
{
/**
* @var integer
*
* @ORM\Column(name="fk_art", type="integer", nullable=false)
*/
private $fkArt;
/**
* @var string
*
* @ORM\Column(name="libelle_serv", type="text", length=65535, nullable=false)
*/
private $libelleServ;
/**
* @var string
*
* @ORM\Column(name="description_serv", type="text", length=65535, nullable=false)
*/
private $descriptionServ;
/**
* @var integer
*
* @ORM\Column(name="id_prestation", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $idPrestation;
/**
* @var \MPCleanCoreBundle\Entity\Marchandises
*
* @ORM\ManyToOne(targetEntity="MPCleanCoreBundle\Entity\Marchandises")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="fk_marc", referencedColumnName="id_marc")
* })
*/
private $fkMarc;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="MPCleanCoreBundle\Entity\OptionPrestation", inversedBy="fkMarc")
* @ORM\JoinTable(name="contenir",
* joinColumns={
* @ORM\JoinColumn(name="fk_marc", referencedColumnName="id_prestation")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="fk_opt", referencedColumnName="id_opt")
* }
* )
*/
private $fkOpt;
}
|
Vu que j’utilise un héritage multitables, j’ai utilisé le JOINED .
Quand je vais sur ma page produit, j’obtiens l’erreur suivante :
Duplicate definition of column ’id_marc’ on entity ’MPCleanCoreBundle\Entity\Produit’ in a field or discriminator column mapping.
Si je fais le doctrine:schema:update via la console, j’obtiens l’erreur suivante :
[Doctrine\ORM\Mapping\MappingException]
Entity ’MPCleanCoreBundle\Entity\Prestation’ has a composite identifier but
uses an ID generator other than manually assigning (Identity, Sequence). T
his is not supported.
Je suis en train de me demander s’il ne vaut mieux pas que je supprime toutes mes entités vu que je n’ai encore quasiment rien dedans et de les générer à nouveaux.