|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||||
|
Membre chevronné
![]() Développeur Web Inscription : mars 2005 Messages : 766 ![]() |
Ladies and gentlemen,
Soit une gestion de catalogue simplifiée : j'ai des objets Category, Product, Image. Une catégorie ou un produit a 1:n images, une image n'appartient qu'à un seul élément de type donné (produit ou image). Utiliser une relation 1:n classique en mettant la clé étrangère dans la table Image n'est pas satisfaisant ici car on ne sait pas quelle table va référencer cette clé étrangère. C'est pourquoi une table intermédiaire est introduite : CategoryImage qui lie une image à sa catégorie, ProductImage qui lie une image à son produit. Si on ne considère que le côté 'catégorie', cela nous donne un schéma (simplifié) comme ceci : Code :
Code :
Je prépare aussitôt l'objet Image de la façon la plus banale qui soit : Code :
Citation:
Hein ? |
|||||||
|
|
00
|
|
|
#2 | ||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Ton schéma et code qui en découlent me semblent compliqué.
Je te propose d'utiliser l'héritage pour simplifier le schéma, le code et ton travail... Code :
Il n'y a plus qu'à encapsuler ton form imageProductForm dans le productForm. Pour retrouver les images d'un produit : $produit->getImages(). En fait, tu ne vas jamais travailler directement avec le modèle image, mais avec un de deux hérités. Pour retrouver le produits d'une image, tu instancie l'image depuis imageProduct en $prodImage (par exemple) et tu retrouves le produit par : $prodImage->getProduct() Code simplifié et maintenance simplifiée que demande le peuple ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||
|
10
|
|
|
#3 |
|
Membre chevronné
![]() Développeur Web Inscription : mars 2005 Messages : 766 ![]() |
Très juste. Je n'avais pas encore utilise les héritages de Doctrine, une bonne occasion de m'y mettre. Ca marche et c'est immensément plus simple en effet !
J'ai juste pris la stratégie 'concrete' plutôt que 'colum-aggregation' car j'aime bien les clés étrangères typées et je n'aime pas les typages par qualifiants (colonne 'type' ici). C'est plus propre côté gestion des clés étrangères & c'est plus proche du modèle orienté objet. Merci pour la piste ! |
|
|
00
|
|
|
#4 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Ce que tu dis n'est pas faux.
Par contre, tu vas te retrouver avec trois tables, une pour chaque liaison et une qui ne sert à rien, mais est, malgré tout, créé. C'est pour cela, entre autre, que, dans ce type de cas, je prends la solution que j'ai proposé. Toutes les données d'un même type sont dans une table et une seule, et, pour moi, ce type de mise en œuvres est bien conformes aux 5 formes normales (Ah les anciens et leur normes)...
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
Copyright © 2000-2012 - www.developpez.com