|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 311 ![]() |
Bonjour,
j'utilise symfony pour créer une application de gestion d'articles. je dispose de 3 entités : "article", "fournisseur" et "stock" avec une relation "articleLivré" reliant ces 3 entités avec une cardinalité (1,n). Alors dans mon schéma de BD j'obtiens en plus des tables des 3 entités, une 4ème table "article livré" qui contient les 3 clés étrangères (Les Id des entités) + date livraison + quantité stockée. J'ai besoin en fait que l'utilisateur puisse rentrer dans le frontend la date et la quantitée livrée correspondant au bon produit. J'ai créé un module "livraison" associée à la table "articleLivré" sauf que le problème que j'ai, c'est que l'action Edit ne permet pas de choisir un Id spécifique de produit, un Id de fournisseur ou un Id de stock (Alors que sur phpmyAdmin il me propose de choisir un Id parmi tous les Id de produits présents quand j'insère un enregistrement dans la table "articleLivré"...). Je ne sais pas vraiment comment faire?? Est-ce qu'il faut modifier l'action executeEdit? et par la même occasion, comme les Id ne sont pas parlants, est-ce qu'on peut afficher en plus les noms d'article et de fournisseur dans 'L'Edit" qu'on récupère à partir des tables "article" et "fournisseur"? Code :
|
||
|
|
00
|
|
|
#2 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Tu veux faire un formulaire de recherche évolué ?
Ta recherches doit te retourner plusieurs ligne ou une seul ligne ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#3 | |
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 311 ![]() |
Citation:
En fait, c'est pas vraiment une recherche évoluée, mais juste au niveau du formulaire d'édition ou de Nouvel enregistrement de la table "articleLivré", avoir la possibilité de choisir entre les différents Id (clés étrangères) possibles et avoir en plus le nom de l'article, du fournisseur..associé à chaque Id. |
|
|
|
00
|
|
|
#4 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Normalement, si ton shema.yml est bon, tu devrais avoir automatiquement des widget sélection sous forme de liste qui sont générés.
Si ce n'est pas le cas, met ton shema.yml, pour voir.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#5 | |||
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 311 ![]() |
Citation:
Code :
|
|||
|
|
00
|
|
|
#6 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Tu peux déjà virer tous ce qui est truc: false qui est la valeur par défaut, cela va alléger le schéma.
J'ai des doutes sur une clef primaire à trois champs. Doctrine 1.2 a beaucoup de mal à gérer les clefs à deux champs, alors 3... A ta place je ferais trois clefs indépendantes et une clef primaire Id de son côté. Ceci n’empêche pas de créer un index regroupent les trois clef et, éventuellement, unique. De plus ta clef à trois champs me semble assez limitative dans la mesure où un article ne dans une position de stock fourni par un fournisseur ne peut avoir qu'une liaison qui me semble être proche d'une vente. Une vente pour un article lié et on le jette ? Puis juste un point de rhétorique (vu que tu vas, je pense, modifier le schéma là), pourquoi mettre un notnull sur un élément constituant la clef primaire ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#7 | |
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 311 ![]() |
Citation:
Si c'est trop compliqué à faire, je vais concevoir l'appli autrement, je pourrais ne garder que la jointure entre table "article" et "fournisseur" et à ce moment là j'aurai 2 clés étangères, est-ce que symfony peut gérer ça? Si c'est ça, j'aurai quand même une table jointure "articlelivre" avec les 2 attributs en plus "date livraison" et "quantité". Alors mon autre question c'était, si je crée un module frontend "livraison" comment je pourrais récupérer le nom d'un article et le nom d'un fournisseur à partir des actions de ce module? Merci pour vos réponses |
|
|
|
00
|
|
|
#8 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Il n'y a pas de rapport entre une clef primaire et une liaison entre deux tables. Tu peux avoir 40 liaisons d'une table vers 40 table et avoir une clef primaire constituée d'un champ.
Commence par mettre une clef primaire unique (id) (pas de déclaration de primary, doctrine s'en chargera) et fait tes trois liaisons tranquillement, ton schéma et ton application devraient s'en porter mieux.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#9 | |||
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 311 ![]() |
Citation:
Code :
|
|||
|
|
00
|
|
|
#10 | ||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Le shema à ma façon
Code :
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||
|
00
|
|
|
#11 | ||
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 311 ![]() |
Merci Michel Rotta pour toutes ces explications, c'est très sympa!!!
là j'ai corrigé mon schéma et mon module livraison marche presque En fait les actions "Edit" ou "list" marchent bien. La seule action qui fonctionne pas comme je veux c'est "New", càd quand je veux rajouter une nouvelle ligne livraison. En fait il ne m'affiche pas du tout les Ids d'article ou de fournisseur ou de labo. il affiche uniquement le formulaire avec date livraison et quantité. Alors quand je fais "save" j'ai cette erreur: SQLSTATE[HY000]: General error: 1452 Cannot add or update a child row: a foreign key constraint fails c'est normal parce que j'avais aucun id de produit, ni de fournisseur...mais je ne sais pas comment les rendre visibles au niveau du formulaire pour permettre à l'utilisateur de les informer. Voici un aperçu du fichier "_form" du module livraison Code :
|
||
|
|
00
|
|
|
#12 | ||
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 311 ![]() |
Finalement, j'ai résolu le problème de cette erreur SQL lié à la clé étrangère.
j'ai fait ça en modifiant les Widgets et j'ai réussi à avoir dans le formulaire d'ajout d'une nouvelle livraison, la liste proposant les Id des articles, Id fournisseurs... par contre j'arrive pas encore à afficher plutôt la liste des noms des articles et des noms de fournisseurs. je me demande s'il faut le faire au niveau des Widgets aussi ou ailleurs Code :
|
||
|
|
00
|
|
|
#13 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
La seul chose a tirer de ce template c'est que tu affiches simplement le formulaire :Ce qui permet au moins de déjà retirer une bonne centaine de causes possibles...
![]() Mais, tu dis : "En fait il ne m'affiche pas du tout les Ids d'article ou de fournisseur ou de labo". Ce qui me laisse entendre que tu n'as pas les mêmes champs pour l'édition que pour la création. Vu que ceci n'est pas modifié au niveau du template c'est que tu dois avoir des trucs particuliers dans ton contrôleur ou un double formulaire. Qu'en est-il ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#14 | |||
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 311 ![]() |
Citation:
Donc le problème était dû à ça (dans la classe "BaseArticleLivreForm") Code :
maintenant comment faire pour afficher les noms des articles au lieu des Id? Merci d'avance!!! |
|||
|
|
00
|
|
|
#15 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Je traite plus de 10 questions différentes par jour, je n'ai jamais eu la prétention de pouvoir connaître tous les problèmes dans le détail.
Mais, sans citer le module, que j'ai eu du mal a retrouver dans la discutions, je ne dis pas le contraire. Chose importante, il ne faut jamais modifier un form auto généré, c'est a dire ceux que l'on retrouve sous la forme lib/form/doctrine/base/BaseXxxxForm.class.php. En effet, ceux-ci sont successible d'être régénérer à n'importe quel moment et donc d'engendrer la perte de toutes les modifications. Par contre il n'est pas logique que sur BaseArticleLivreForm le widget généré pour un champ de liaison soit de type hidden. Il devrait être de type select (soit une liste déroulante par défaut). Il convient donc de régénérer les objets base avec une commande "build --all". Attention, celle-ci supprime la base de données avant de la recréer...
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#16 | |
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 311 ![]() |
Citation:
Pour l'histoire des noms d'article, fournisseur, etc à la place des Id, j'ai pu la régler finalement, il fallait rajouter une fonction __toString() dans les classes correspondantes et ça marche!!! |
|
|
|
00
|
|
|
#17 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
oui, __toString marche, mais avec des select, pas avec des hidden...
D'où ma tentative de te faire transformer tes hidden vers des select, que tu as dû faire, puisque cela marche. Le __toString() est l'étape suivante. Mais le principale est que cela marche. ![]() La différence entre théorie et pratique ? La théorie c'est quant on sait pourquoi cela ne marche pas, la pratique c'est quant on ne sait pas pourquoi cela marche. A noter qu'il existe aussi la merde, quant on ne sais pas pourquoi cela ne marche pas. Et enfin, l'inconnu, quant on sait pourquoi cela marche...
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#18 | |
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 311 ![]() |
Citation:
![]() l'essentiel ce que ça marche...mais avec ce projet là, ce n'est jamais fini, je passe d'une difficulté à une autre, comme c'est la première fois que j'utilise symfony, c'est pas gagné
|
|
|
|
00
|
|
|
#19 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
C'est bon alors, il parait qu'à partir du dixième projet cela commence à aller mieux...
__________________
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