|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre habitué
![]() Ludovic Étudiant Inscription : janvier 2011 Messages : 124 ![]() |
Bonjour,
Dans le cadre d'un stage, je dois adapter les modules générés par l'admin generator pour en faire une interface web classique (transformer un frontend en backend). Je cherche donc à ajouter une action show, seulement voilà je n'arrive pas à récupérer les données liées aux relations N..N, je réfléchis encore mais j'aimerai d'abord savoir si vous pensez que c'est réalisable ? J'ai un autre problème qui je pense est plus facile à résoudre : J'ai une table qui contient deux clés étrangères qui pointent vers la même table seulement voilà l'affichage dans le backend ne fonctionne pas alors que j'ai suivi des exemples que j'ai trouvé dans ce forum : Code :
Code :
Code :
|
||||||
|
|
00
|
|
|
#2 | ||
|
Membre éclairé
![]() Loïc LaffontInscription : juin 2007 Messages : 495 ![]() |
essais comme ça.
Code :
__________________
En théorie tout devrait fonctionner... La France a un incroyable talent : Son retard en technologie informatique
|
||
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Ludovic Étudiant Inscription : janvier 2011 Messages : 124 ![]() |
Cette solution ne fonctionne pas. J'ai essayé de renommer la deuxième relation en NodeLeading et maintenant quand je choisi d'afficher NodeLeading et Node j'ai la colonne NodeLeading qui s'affiche bien alors que Node n'affiche rien donc je pense que la relation Node est écrasé par NodeLeading.
Est-ce que je peux surcharger la méthode getNode() dans Person et je fais un appel à une requête getNodeById() de NodeTable.class.php sinon ? |
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Loïc LaffontInscription : juin 2007 Messages : 495 ![]() |
Avant de surcharger quoi que ce soit il me semble bon de fouiller côté schema.
Car si rien ne s'affiche c'est qu'il y'a soucis a ce niveau. Car au minimum tu devrais avoir un ID représentant la relation. Tu as bien utilisé la balise foreignAlias au lieu de foreign ? Montre nous un peu plus de ton schema car juste avec les relations on peut vite extrapoler
__________________
En théorie tout devrait fonctionner... La France a un incroyable talent : Son retard en technologie informatique
|
|
|
00
|
|
|
#5 | ||||
|
Membre habitué
![]() Ludovic Étudiant Inscription : janvier 2011 Messages : 124 ![]() |
Suite à une discussion avec mon tuteur, on a décidé de transformer la deuxième relation en un booléen mais même après supprimer la deuxième relation, il ne m'affiche toujours rien. Par contre quand je demande node_id, il m'affiche bien l'id.
Code :
Code :
|
||||
|
|
00
|
|
|
#6 | ||||
|
Membre éclairé
![]() Loïc LaffontInscription : juin 2007 Messages : 495 ![]() |
Je penses que tu as un conflit dans tes noms.
Tu nommes un colonne de ta table node_id et tu donnes le même nom à ton Alias. Perso je la jouerais comme ça : Entrecoupé de Code :
php symfony doctrine:clean-model-files Code :
Code :
__________________
En théorie tout devrait fonctionner... La France a un incroyable talent : Son retard en technologie informatique
|
||||
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() Ludovic Étudiant Inscription : janvier 2011 Messages : 124 ![]() |
Pour le moment je passe par un booléen pour ce problème, je le retrouverai surement dans d'autres tables mais j’essaierai de me débrouiller.
En tout cas, merci pour ton aide. |
|
|
00
|
|
|
#8 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Tu peux mettre tous le shema.yml ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#9 | ||
|
Membre habitué
![]() Ludovic Étudiant Inscription : janvier 2011 Messages : 124 ![]() |
Code :
|
||
|
|
00
|
|
|
#10 | ||||||||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Je pense que tu as intérêt à nettoyer ton schéma de tous ce qui est par défaut (les propriétés avec false).
A redéfinir tous les liens, a priori, de ce que j'en ai vu, les nom des champs sont conformes à la norme, un lien est alors défini sur une seule des deux tables, par exemple : Code :
Je ne sais pas si tu as des liaisons n-n mais il y a des particularités, dans ce cas, précises où et je te donnerais un exemple adapté. Normalement, tu devrais pouvoir générer une base de données identique à celle prévue initialement avec l'avantage d'avoir un modèle objet qui soit utilisable. Après, tu as la possibilité de ne générer que le modèle objet a partir du shema.yml adapté et d'utiliser la base de données initiale. Ce qui permet d'avoir un modèle viable sous symfony/doctrine et de conserver la base d'origine. C'est moins simple que de tout créer depuis symfony, mais moins pire que de travailler uniquement sur un shema importé et non conforme aux normes sous symfony/doctrine. Vois avec ton tuteur si tu peux virer les enum, c'est un truc à éviter comme la peste d'une manière générale. Il faut ce méfier des clefs composées (PersonActivity) que doctrine gère particulièrement mal, sauf dans le cas où ta table est une table de liaison n-n. Il reste difficile de gérer les arguments pour ces cas là. Tu as une liaison n-n manifestement entre person et domain dans ce cas les relations deviennent : Code :
Dans un DQL la requête pour récupérer les person et leur domain devient alors Code :
A noter que certaine relation (comme celle qui te pose problème avec node_5) ne peuvent être écrites aussi simplement vu que le nom de la relation n'est pas le nom du champ ni celui de la classe en fasse. A mon avis ton problème vient du fait que tu n'as qu'un côté de la relation écrite sans indications miroir vu que tu les écris des deux côtés... Donc, réduite à un côté, ta relation va devenir : Code :
Bonne chance
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||||||||
|
00
|
|
|
#11 |
|
Membre habitué
![]() Ludovic Étudiant Inscription : janvier 2011 Messages : 124 ![]() |
Je te remercie beaucoup pour tous tes conseils.
Je vais essayer d'en appliquer le maximum seulement voilà, mon tuteur aimerai, à l'avenir, pouvoir rapidement et avec un minimum de modification refaire ce que j'ai fait sur d'autres bases de données donc il me demande de modifier le moins possible ce qui est généré par doctrine. Je veux pas trop lui forcer la main et je sais pas trop comment lui expliquer que de toute façon, même si il veut utiliser le schéma généré par doctrine et dans l’hypothèse que ça fonctionne correctement, il y a quand même énormément de modification à apporter à d'autres endroits. |
|
|
00
|
|
|
#12 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Tu peux toujours m'envoyer ton tuteur sur developpez.net...
Même s'il est théoriquement possible de récupérer un shéma.yml à partir d'une base de donnée existante, ce ne peut être qu'un pis allez. La bonne méthode consiste alors à réécrire le shema.yml récupéré pour l'optimiser (vis a vis du modèle qui sera utilisé) et a générer le modèle (et les form et les filtres) depuis ce schéma optimisé. L'idéal consiste à créer les tables en se basant sur le modèle (et non pas créer le modèle en se basant sur les tables). Si non, si c'est juste pour faire de l'édition dans les tables, il y a des outils comme phpMyAdmin qui le font très bien
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#13 |
|
Membre habitué
![]() Ludovic Étudiant Inscription : janvier 2011 Messages : 124 ![]() |
Je vais essayer de lui en parler puis je vais lui proposer de lui fournir un document dans lequel je vais réunir toutes les modifications que j'aurai apportée.
Surtout que par exemple, supprimer toutes les lignes par défaut, c'est simple, il suffit de la surligner CTRL + H et 'remplacer tout' par un espace. Rien que cette manip allège énormément le schéma. |
|
|
00
|
|
|
#14 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Ca allège le schéma, mais qu'ils y soient ou pas ne change pas le fonctionnement.
Le plus important est la correcte écriture des liens, simple (1-n) et double (n-n) avec des nom et des contrôles qui marchent. De plus cette méthode fait abstraction des behavior de doctrine, (plugin) qui peuvent rendre d'énormes services.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#15 |
|
Membre habitué
![]() Ludovic Étudiant Inscription : janvier 2011 Messages : 124 ![]() |
Es-ce que tu pense qu'il serai possible de créer un script PHP qui reprendrai tout le schéma par rapport à des conventions qu'on a suivi ? Il existe un objet PHP qui permet de manipuler facilement les fichiers YAML non ?
|
|
|
00
|
|
|
#16 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Le problème n'est pas là.
En effet, la logique qui dirige l'écriture de la structure d'une base n'est pas la même que celle qui analyse le concept objet des données. En symfony/doctrine on gère des données représentées par des objets qui sont stocké dans des tables. A la limite, la manière dont ils sont stocké ne nous intéresse pas, c'est les objets et leurs valeurs qui nous intéressent. La méthode qui part de la base de données pour en déduire un modèle est castratrice au niveau du modèle objet généré vu qu'elle ne voit que la notion de base de données. Il n'est donc pas possible de créer un outil qui manipule simplement le fichier shema.yml, il faut qu'il y ait "la main du maître" (ou l’œil) pour qu'on puisse y distinguer un schéma conducteur.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#17 |
|
Membre habitué
![]() Ludovic Étudiant Inscription : janvier 2011 Messages : 124 ![]() |
J'ouvre une nouvelle discussion parce que j'ai plusieurs questions.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com