Bonjour à toutes et à tous,
J'ai vraiment cherché partout avant de poster, mais étrangement je n'ai pas trouvé de réponse, pourtant il me semble que mon souci est ultra classique...
Je veux gérer un ensemble de programmes qui peuvent avoir des propriétés différentes en fonction de leur type, mais étant donné qu'un tas de relation s'appliquent à l'ensemble des programmes, il me parait naturel dans mon modèle d'utiliser l’héritage pour ne pas avoir à multiplier les relations et bien sur optimiser l'espace utilisé par la base.
Voici un extrait du modèle (simplifié) :
J'ai créé mon modèle dans Doctrine et j'ai du coup (entres autres) :
class Programme
{
...
}
class Film Extends Programme
{
...
}
class Spectacle Extends Programme
{
...
}
Dans mes entités filles, je n'ai mis aucune annotation concernant l'héritage, quand j’exécute la commande doctrine:schema:update, il me créé bien les tables Programme, Film et Spectacle, mais ce qu'il fait c'est créer les tables filles avec toutes les propriétés de la classe mère. Du coup déjà, je perds l'interet de l'héritage au niveau du stockage des données et d'autre part la table programme n'est finalement jamais remplie.
Mais encore pire que tout, lorsque je veux renseigner les pays rattachés à un programme (j'utilise la fonctionnalité des fixtures), via une table programme_pays (créée par doctrine car c'est une relation ManyToMany), j'ai une erreur de violation de clé étrangère, un peu comme si il cherchait à inserer des données en doublons dans la table programme_pays, une fois pour le programme et une fois pour le film, ce qui semble deja assez improbable vu que les id devraient être differents...
Bref, je suis un peu perdu sur la gestion de l'héritage par Doctrine...Je ne suis pas sur d'être très clair, n'hésitez pas à me poser des questions si le coeur vous en dit de m'aider... !
Merci d'avance et à bientot !
PS: je peux très bien contourner le problème de l'héritage en ajoutant une entité TYPE-PROGRAMME(Id, libelle) qui contiendrait Film et spectacle), mais il me semble que ce serait plus propre, conceptuellement parlant, de faire un héritage...
Partager