Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/03/2011, 16h40   #1
Membre éclairé
 
Avatar de llaffont
 
Loïc Laffont
Inscription : juin 2007
Messages : 495
Détails du profil
Informations personnelles :
Nom : Loïc Laffont
Âge : 34
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : juin 2007
Messages : 495
Points : 380
Points : 380
Par défaut Sauvegarder la relation produite par embedRelation

Bonjour,

Dans mon projet, je dois permettre la création de fiche d'intervention.
Jusque là pas de problème.

Ma fiche s'enregistre correctement avec toutes les informations necessaire.
Pour l'instant j'ai "triché" sur une étape de mon formulaire.

En effet dans mon formulaire j'ai deux zones différentes qui doivent enregitrer leur données dans deux tables différentes.
J'ai "triché" en ne faisant qu'une seule table, mais il me faut aujourd'hui établir le principe convenablement.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
intervention:
  actAs: [Timestampable]
  options:
    collate: utf8_unicode_ci
    charset: utf8
  columns:
    probleme : { type: string(255) }
    cause : { type: string(255) }
    solution : { type: string(255) }
    batiment : { type: string(255) }
    atelier : { type: string(255) }
    section : { type: string(255) }
De quoi s'agit-il ?

Mon formulaire est constitué d'un fieldset comprenant les détails de l'intervention, puis d'un second fieldset représentant la localisation.
En découle donc une table Intervention lié a la table localisation par la valeur localisation_id.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
intervention:
  actAs: [Timestampable]
  options:
    collate: utf8_unicode_ci
    charset: utf8
  columns:
    probleme : { type: string(255) }
    cause : { type: string(255) }
    solution : { type: string(255) }
    localisation_id : { type: integer, notnull: true }
  relations:
    localisation:     { local: localisation_id, foreign: id }
 
localisation:
  actAs: [Timestampable]
  options:
    collate: utf8_unicode_ci
    charset: utf8
  columns:
    batiment : { type: string(255) }
    atelier : { type: string(255) }
    section : { type: string(255) }
En creusant j'ai trouvé l'embedRelation. Je l'ai donc ajouté à mon InterventionForm.class.php
Code :
1
2
 
$this->embedRelation('localisation');
J'obtiens bien le resultat voulu a savoir un tableau avec mes champs définies.

Mais je n'arrive pas à passer le validator il m'indique que ma valeur localisation_id est Required

Je pense que j'oublie une étape mais je n'arrive pas a trouver la solution.

Pourriez-vous m'aider ?

Etant qu'un simple débutant en symfony et n'ayant pas une grande connaissance de la POO. Je suis largué...
__________________
En théorie tout devrait fonctionner...

La France a un incroyable talent : Son retard en technologie informatique
llaffont est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 18h50   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Tu as modifié la méthode configure de FormLocalisation.class.php ?

Tu peux la mettre ?

Dans ton schéma, la relation devrait être :
Code :
1
2
3
 
  relations:
    localisation:     { local: localisation_id, foreign: id, foreignAlias: interventions }
et si tu considères que les noms des clefs sont conformes à la norme (il le sont) tu peux l'écrire :
Code :
1
2
3
 
  relations:
    localisation:     { foreignAlias: interventions}
ceci indique comment retrouver les interventions depuis la table localisation.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 08h36   #3
Membre éclairé
 
Avatar de llaffont
 
Loïc Laffont
Inscription : juin 2007
Messages : 495
Détails du profil
Informations personnelles :
Nom : Loïc Laffont
Âge : 34
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : juin 2007
Messages : 495
Points : 380
Points : 380
Citation:
Envoyé par Michel Rotta Voir le message
Tu as modifié la méthode configure de FormLocalisation.class.php ?
Heu ! non ! Il fallait ?

Je vais tenter de regarder le tuto

Je profite que tu ais évoqué les relations dans le sujet.
J'ai ceci dans un autre test :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
 
Maintenance:
  actAs: [Timestampable]
  options:
    collate: utf8_unicode_ci
    charset: utf8
  columns:
    Cri_id:  { type: integer, notnull: true }
    Element_id_change:  { type: integer, notnull: true }
    Element_id_installe:  { type: integer, notnull: true }
    Serial_Number_change:  { type: string(255), notnull: true }
    Serial_Number_installe:  { type: string(255), notnull: true }
  relations:
    Element:  { local: Element_id_change, foreign: id, foreignAlias: maintenance_change }
    Element:  { local: Element_id_installe, foreign: id, foreignAlias: maintenance_installe }
Puis

Code :
1
2
3
4
5
6
7
8
9
 
Element : 
  options:
    collate: utf8_unicode_ci
    charset: utf8
  columns:
    Référence:  { type: string(255), notnull: true }
    Type:  { type: string(255), notnull: true }
    Marque:  { type: string(255), notnull: true }
Une seule des deux relation est visible sous phpMyAdmin où est mon erreur ?
__________________
En théorie tout devrait fonctionner...

La France a un incroyable talent : Son retard en technologie informatique
llaffont est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 11h43   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Citation:
Heu ! non ! Il fallait ?
Non, mais cela aurait pu être une explication.


Schéma corrigé à ma façon.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
Maintenance:
  actAs: 
   Timestampable: ~
  options:
    collate: utf8_unicode_ci
    charset: utf8
  columns:
    Cri_id:  
     type: integer
     notnull: true
    Element_change_id:  
      type: integer
      notnull: true 
    Element_installe_id:
      type: integer
      notnull: true
    Serial_Number_change:
      type: string(255)
      notnull: true
    Serial_Number_installe:  
      type: string(255)
      notnull: true 
  relations:
    Element_change:
      class: Element
      local: Element_change_id
      foreignAlias: maintenance_changes
    Element_installe:  
      class: Element
      local: Element_installe_id
      foreignAlias: maintenance_installes
  • on ne peut avoir deux relations avec un même nom (Element), d'où l'argument class pour préciser la classe de liaison.
  • "s" à la fin des noms des liaisons inverses (foreignAlias) pour indiquer qu'elles retournent des Doctrine_Collection.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 13h17   #5
Membre éclairé
 
Avatar de llaffont
 
Loïc Laffont
Inscription : juin 2007
Messages : 495
Détails du profil
Informations personnelles :
Nom : Loïc Laffont
Âge : 34
Localisation : France, Loire (Rhône Alpes)

Informations forums :
Inscription : juin 2007
Messages : 495
Points : 380
Points : 380
Merci pour cette correction.


Dans le même esprit j'avais ouvert le post suivant dans les ORM. Beaucoup de consultation mais pas beaucoup d'aventurier se sentant l'âme d'un enseignant.

exemple-simple-relation-many-many-one-many

Si tu te sens le coeur aventurier
__________________
En théorie tout devrait fonctionner...

La France a un incroyable talent : Son retard en technologie informatique
llaffont est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 13h50   #6
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Le traitement de la salle plugin passe après la racine dans mon schéma de lecture...

C'est un cas simple, il aura 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).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h57.


 
 
 
 
Partenaires

Hébergement Web