Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'ai généré mes entités à partir d'une base de données existante grâce à Doctrine 2, mais il se trouve qu'il ne reconnait pas l'héritage et fait un mapping de chaque table comme des tables à part entière.
Pour y remédier, j'ai donc modifié les entités concernées pour qu'elles prennent en compte l'héritage. Cependant, lorsque j'utilise l'outil de validation de schéma, Doctrine 2 me valide mes entités, mais pas sa concordance avec la base de données !
J'ai essayé de générer la base de données à partir des entités pour voir comment Doctrine 2 s'y prenait pour gérer l'héritage et j'ai vu qu'il créait un champ "dtype" dans la classe parent.
Peut-on se passer de ce champ ? Si oui, comment s'y prendre ? Si non, y-a-t-il d'autres alternatives pour mapper mon héritage ?
Dernière modification par Seryus (11-04-2014 11:07:10)
Hors ligne
Salut, je n'ai pas fait beaucoup d'héritage mais sur les fois où je l'ai fait j'avais la colonne. C'est ce qui permet à doctrine de savoir comment faire la jointure .
Hors ligne
Je ne peux pas faire autrement dans ce cas ? Quel genre d'informations Doctrine stocke dans ce champ ? Le nom de la table enfant ?
Ça me parait bizarre, normalement on utilise une colonne "type" pour un héritage où on fusionne les table enfants dans le parent (avec des champs à null).
J'ai aussi un autre problème concernant les identifiants des enfants : Doctrine considère que les identifiants des enfants a le même nom que l'identifiant du parent. Or l'identifiant des enfants est une clé étrangère qui pointe vers le parent, je le nomme donc différemment dans la base (nom_de_la_table_référencée_id). Doctrine peut-il gérer ce cas ?
Hors ligne
Tu dois avoir deux méthodes pour l'héritage mais je maitrise pas assez pour t'aiguiller là dessus. Je t'encourage à chercher un peu sur la doc tu vas trouver je me souviens l'avoir lu. C'est juste pas facile à trouver :p. Mais tu peux faire les 2 c'est sûr. En fait le dtype correspond à la colonne type
Hors ligne
Après relecture de la doc (http://doctrine-orm.readthedocs.org/en/ … nheritance) il semblerait qu'il ne soit pas possible de faire autrement, et le champ "dtype" contient bien le nom de l'entité enfant (ou l'alias spécifié dans DiscriminatorMap d'après ce que j'ai compris).
Je pensais que la phrase
Doctrine2 a écrit:
Doctrine 2 implements this strategy through the use of a discriminator column in the topmost table of the hierarchy because this is the easiest way to achieve polymorphic queries with Class Table Inheritance.
sous entendait "Il y a d'autres méthodes, mais celle-ci est la plus simple à mettre en place".
Doctrine ne tolère pas vraiment les standards de la modélisation au final, il faut à chaque fois modifier la base pour ses besoins
Merci quand même pour ton aide !
Dernière modification par Seryus (11-04-2014 11:06:55)
Hors ligne
Pages: 1