|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Étudiant Inscription : novembre 2008 Messages : 67 ![]() |
Bonjour !
Je continues de m'initier à Symfony et à ses merveilles et je me pose une question existentielle sur l'héritage concret et les tables d'assocations. j'ai dans mon schéma une super-classe "Relation" de laquelle hérite (héritage concret) une collaboration et une Mobilité. Si la super-classe est en relation via une table d'association avec un élément X, est-ce qu'il sera possible d'ajouter un lien entre cet élément X et une classe-fille de ma super-classe dans cette même table d'association ? En somme comment marche l'héritage concret combiné avec des assocations par table ? Merci d'avance, Noobboy |
|
|
00
|
|
|
#2 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Tu sais que pour ce type de question tu te dois de fournir le paracétamol ?
![]() Dans ton cas, je ne générerais pas de relation sur la classe principales. En principe rien n’émèche une entité d'être en relation deux fois avec une autre entité, il faut juste que le nom des relations des deux côtés soient bien différents. Met ton shema.yml si tu as des doutes...
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#3 | ||
|
Futur Membre du Club
![]() Étudiant Inscription : novembre 2008 Messages : 67 ![]() |
Désolé si c'est un peu tordu ce que je demande. Donne moi l'adresse, j'enverrais un carton d'aspirine.
L'idée est qu'un partenaire ne peut intervenir qu'une seule fois dans une même relation mais qu'une relation peut demander l'intervention de plusieurs partenaires. *rajoute un tube de paracétamol dans le carton* Et j'ai du mal à voir -et à trouver en compulsant internet à coup de moteur de recherche- comment réaliser une liaison n-n (many-to-many) sans passer par une table d'association... Pour ce qui est du schema.yml : Code :
|
||
|
|
00
|
|
|
#4 | ||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Shema : à ma façon
Code :
Il est impossible de faire une relation n-n sans une table intermédiaire. Je ne comprend pas à quoi sert l'entité relation qui n'as pas d'attribut. Sans au moins une des tables et une des relations sur les entités CollaborationInternationale et apparenté, impossible de savoir si elle sont cohérentes.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||
|
10
|
|
|
#5 | ||
|
Futur Membre du Club
![]() Étudiant Inscription : novembre 2008 Messages : 67 ![]() |
En fait, j'ai mis tout le schema.yml pour faire simple et comme ça il ne manquera rien.
Pour ce qui est de l'entité relation, c'était pour faire une classe-mère qui englobait les trois types de relation que nous avons : mobilite, relation formelle et informelle. J'ai cru que faire de l'héritage serait mieux. Avant de commencer, reprend donc un verre d'aspirine. Code :
|
||
|
|
00
|
|
|
#6 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Je fais surtout commencer par te faire travailler....
Supprime toutes les options qui ont leur valeurs par défaut, au moins pour les fields, en gros, tous ce qui ce termine par false... Tu peux aussi supprimer les : "connection: doctrine" qui ne servent à rien, sauf si tu envisages de gérer simultanément plusieurs bases de données. Remets ton shema.yml allégé une fois la cure de jouvence terminée
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#7 | ||
|
Futur Membre du Club
![]() Étudiant Inscription : novembre 2008 Messages : 67 ![]() |
Effectivement, ces 155 lignes superflues ne servaient qu'à rendre le code encore plus illisible...
Ok, voici : Code :
|
||
|
|
00
|
|
|
#8 | ||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Partiellement retouché
Code :
Regarde, pose les questions qui ne semblent pas évidentes, tiens compte de tout (le plus petit s est significatif) Retouche le reste du shema.yml et revient par ici
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||
|
10
|
|
|
#9 | ||
|
Futur Membre du Club
![]() Étudiant Inscription : novembre 2008 Messages : 67 ![]() |
Ok, alors les questions qui me viennent :
- Pourquoi les foreignAlias ? Quel est son utilité ? Si j'ai bien compris, ça sert à customiser le nom de ce sur quoi on pointe mais là, je ne vois pas trop... J'ai donc déduit de la disparition que Doctrine détecte automatiquement les id sur auquels on veut qu'il fasse référence, ok, je n'avais pas saisi ce point. - Faire référence à une table d'associations n'est pas obligatoire dans les deux tables qui sont référencés ? - Dans quel cas la mention "foreign" est-elle obligatoire dans une relation ? Code :
|
||
|
|
00
|
|
|
#10 | ||||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Citation:
Citation:
Citation:
Citation:
! A chaque fois qu'elle est différente de sa valeur par défaut ! Ce qui est logique et vrai pour toutes les autres options local, type, foreignType,...
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||||
|
10
|
|
|
#11 | ||
|
Futur Membre du Club
![]() Étudiant Inscription : novembre 2008 Messages : 67 ![]() |
Voici donc mon schema.yml, épuré. (Encore plus qu'au dessus.)
Merci de tes explications, ça allège bien le code. ^^" Question liée : en générant les modules et les CRUD associés, lors de la création d'un Projet, je me retrouve avec un champ texte pour le statut_p mais une liste déroulante pour mon typeProgAcc, pourquoi ? Code :
|
||
|
|
00
|
|
|
#12 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Ton statut_p est une clef d'association utilisée dans la relation statut_p (accessoirement, il devrait plutôt être numérique et s'appeler statut_p_id).
Dans le cas d'une clef d'association, il crée une sélect. Tu peux modifier dans l'objet form er redéfinissant le widget (et le validator probablement). Attention, si tu as une valeur dans statut_p qui n'existe pas dans la table associée, ceci pourrait générer des problèmes. Pas eu trop le temps de relire le modèle.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
10
|
|
|
#13 | ||
|
Futur Membre du Club
![]() Étudiant Inscription : novembre 2008 Messages : 67 ![]() |
Bon, je croyais le soucis résolu mais...non.
J'ai toujours un soucis quand j'ajoute une nouvelle "informelle" : il n'apprécie pas que je veuille mettre un id d'une classe fille à la place d'un id de sa classe mère dans une table de liaison. Y-a-t-il un moyen de contourner ça ? Je vois la solution évidente de supprimer la classe mère et de séparer complètement les deux tables mais ça fait de la redondance de code inutiles et des tables supplémentaires. Si c'est la seule solution, je suis près à la mettre en place mais ça me paraît lourd... Code :
|
||
|
|
00
|
|
|
#14 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Faut que tu fasses plus de tris dans les informations données, l'abondance nuit à la recherche du problème...
Met la partie du schéma qui semble te poser problème, même si la totalité est aussi intéressante. A priori, tu utilises des inheritance de type concret hors les tables générées et le modèle objet qui en découlent donne des tables et objets indépendants. Je ne suis pas très sur qu'il y ait un grand intérêt à une table parent qui n'embarque qu'une id. Accessoirement, une table qui s'appelle relation ne favorise pas la recherche vu que des relations... il y en a beaucoup
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
10
|
|
|
#15 | ||
|
Futur Membre du Club
![]() Étudiant Inscription : novembre 2008 Messages : 67 ![]() |
J'ai mis tout car tu me l'avais demandé la dernière fois. ^^"
Ok, je te fais ça. Note par ailleurs que j'ai supprimé ma super-super-classe "Relation"... Code :
|
||
|
|
00
|
|
|
#16 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Tu as une classe collaboration_international qui est vide hors un id et des relations qui est hérité en concret par Informel, qui lui aussi n'a aucun champs et ce contente de rajouter une quatrième relation...
J'ai un peu de mal à visualiser, dans ton schéma, l'intérêt de telles tables, même si je peux concevoir qu'il existe. Par contre, je ne vois pas vraiment, ici, l'intérêt de l'héritage, définir les relations depuis les deux tables devraient être suffisant. Après, j'ai de gros doutes sur les relations héritées dans ce cas (pour la table Informel). En effet, tu n'as que des relations de type n-n. Et tu vas utiliser les mêmes tables intermédiaires entre la classe parent et la (ou les) classes qui héritent. Le problème est que comme les héritages sont concret, tu as une table différente pour chaque classe, donc une clef incrémenté indépendamment et la plus grande possibilité d'arriver dans une des tables de liaison avec deux enregistrements qui partent d'une table différente, mais avec des id identique vers un même enregistrement lié. De plus, tu vas récupérer les enregistrements lié pour ton enregistrement et ceux de toutes la "famille" des tables hérités qui auront le même id.. Je ne vois pas comment cela pourrait être gérable. Pour ce qui est du code a donner, il faut faire la part des choses, tout est intéressant et dois être donné, mettre en sus le code qui te semble poser problème est un plus pour ceux qui répondent. Si je (ou un autre) passe 40 mn à lire ton code je ne pourrais pas répondre à 4 questions qui m'auraient pris 10mn chacune... Alors, si je gagne 20 minutes pour comprendre ton problème, deux personnes de plus auront une réponse.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
10
|
|
|
#17 |
|
Futur Membre du Club
![]() Étudiant Inscription : novembre 2008 Messages : 67 ![]() |
Effectivement, la réponse à ma question se trouvait dans la définition même d'un héritage concret sous symfony...
Si la table Collaboration_Internationale n'a vraiment aucun intérêt et a donc disparu de mon schéma, la classe Informelle est utile car symbolise autre chose que formelle (normal tu me diras dans le fond...) et dans la forme la séparation des données entre ces deux tables me paraît plus approprié pour des traitements simplifiés sur la base par la suite. J'ai donc enlevé l'héritage qui n'était pas approprié dans ce projet. Effectivement, je comprend bien que tu prends du temps pour répondre aux personnes ayant des soucis comme moi et qu'un texte long et indigeste te prend du temps supplémentaire que tu aurais consacré à aider d'autres personnes. Tout fonctionne à part quelques fonctions générées automatique car Symfony a l'air d'avoir des petits problèmes avec la casse dans les noms de tables et de relations. Chose très facilement corrigeable dans les modèles. Je m'attaque maintenant à la recherche dans un la base via symfony avec l'aide du tuto Jobeet. Merci beaucoup du temps passé à essayer de me comprendre.
|
|
|
00
|
|
|
#18 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Les remarques que j'ai faîtes ne concernait que la structure, pas la qualification et la pertinence du modèle. Il faudrait bien plus de données pour pouvoir y arriver...
Bonne chance pour la suite.
__________________
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