JeuWeb - Crée ton jeu par navigateur
Doctrine et l'héritage concret de table - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Doctrine et l'héritage concret de table (/showthread.php?tid=4929)



Doctrine et l'héritage concret de table - Colmea - 22-06-2010

Bonjour à tous Smile ,

N'ayant eu aucune réponse satisfaisante (ou aucune réponse tout court Big Grin) sur le chan de Doctrine, je viens poser ma question ici en espérant que quelqu'un ai déjà eu affaire au même problème que moi.

Ma question concerne l'héritage de table avec Doctrine, et plus particulièrement l'héritage concret de table.
Donc, contrairement à la stratégie de l'héritage par aggrégation de colonnes, l'héritage concret crée une table distincte pour chaque type, + une table mère qui est... vide (là aussi faut m'expliquer l'utilité)

Concrètement, cela se traduit chez moi comme ceci:
J'ai une table objet qui est la table mère (et qui est donc vide)
+ 3 tables (consommable, arme, armure) qui sont tous des objets et héritent donc de la table mère Objet.

J'aimerais en fait pouvoir (à l'instar de l'héritage par agrégation ou un findAll sur le table Objet me rendait la totalité des objets armes, consommables et armures) récupérer la totalité des objet au moyen d'un findAll sur la table Objet.

Concrètement, si je veux afficher tous les objets sans distinction de "nature" dans l'inventaire du joueur, comment puis-je m'y prendre ?


J'étais passé de l'agrégation au concret pour l'avantage qu'il apportait, à savoir une table distincte pour chaque type d'objet (et donc pas énormément de colonnes dans une table, contrairement à l'agrégation) mais j'avoue que, dans le cas où il n'y aurait pas de solution, je serai contraint de revenir en arrière Confused

Merci d'avance pour vos réponses, et bonne journée Wink


RE: Doctrine et l'héritage concret de table - atra27 - 22-06-2010

Pour doctrine je sais pas mais en sql je ferai:
SELECT * FROM `table1`, `table2`, `table3` WHERE....

En gros si j'ai bien compris tu veux selectionner tous les champs provenant de trois tables différentes?


RE: Doctrine et l'héritage concret de table - Colmea - 22-06-2010

Oui mais 3 tables qui héritent d'une.
Un "bête" leftJoin ne suffirait pas je pense. Car là, les 3 types d'objets seraient quand même distincts. Or je veux pouvoir traiter un objet sans connaitre ton type.


RE: Doctrine et l'héritage concret de table - Colmea - 22-06-2010

Bon, après de nombreuses recherches, il semble impossible de récup tous les objets dans le cas d'un héritage concret de table.
Ca m'étonne énormément mais bon, je ne suis apparemment pas le seul à me poser la question (vu les quelques topics sur des forums par-ci par-là).

Au grand désespoir d'Oxman, je vais donc rester sur la stratégie de l'héritage par agrégation de colonnes et me retrouver avec une table de 10km de long, mais c'est pas grave :good:

Bonne journée à vous

Si vous trouvez une solution, vous pouvez quand même m'en faire part Smile


RE: Doctrine et l'héritage concret de table - srm - 22-06-2010

Je ne vois pas ce qui te pose problème si tu définis les associations entre tes modèles.


RE: Doctrine et l'héritage concret de table - L0rD59 - 19-11-2012

Bonjour ! suite a une recherche sur google je suis tomber ici ! et je me pose exactement la même question que Colmea comment récupérer l'ensemble de mes objets peux importe le type

je n'ai pas spécialement envie de passer par de l'héritage par agrégation !

D'avance merci !