Précédent   Forum du club des développeurs et IT Pro > PHP > Bibliothèques et frameworks > symfony1
symfony1 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
 
Outils de la discussion
Publicité
'
Vieux 11/11/2012, 12h22   #1
popiiii
Candidat au titre de Membre du Club
 
Homme Thomas
Étudiant
Inscription : mars 2012
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme Thomas
Âge : 23
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : mars 2012
Messages : 28
Points : 13
Points : 13
Par défaut Sauvegarde d'un formulaire imbriqué "table association many to many"

Bonjour,

Je sais que les sujets des formulaires imbriqués et celui des tables association "many-to-many" reviennent souvent ... Mais rien à faire j'ai beau lire et relire, fouiller sur les forums, les cookbook, les tuto, en français, en anglais ... je n'y arrive pas !


Je m'explique !


J'ai d'un coté une table joueurs, d'un autre coté une table postes, et entre les deux une table association "postesJoueurs".

Voici mon schema.yml pour ces tables :

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
 
Postes:
  actAs: [ Timestampable, SoftDelete ]
  tableName: postes
  columns:
    id:
      type: integer
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    name:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    sports_id:
      type: integer
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
  relations:
    PostesJoueurs:
      class: Joueurs
      refClass: PostesJoueurs
      local: id
      foreign: postes_id
 
 
Joueurs:
  actAs: [ Timestampable, SoftDelete ]
  tableName: joueurs
  columns:
    id:
      type: integer
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    sfguarduserprofile_id:
      type: integer
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    sexe:
      type: string(10)
      fixed: false
      unsigned: false
      primary: false
      notnull: true
      autoincrement: false
    tel:
      type: string(20)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    portable:
      type: string(20)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    birthday:
      type: date(25)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    taille:
      type: integer
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    poids:
      type: integer
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    photo:
      type: string()
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
  relations:
    PostesJoueurs:
      class: Postes
      refClass: PostesJoueurs
      local: id
      foreign: joueurs_id

J'ai donc ensuite rajouté dans la fonction configure dans mon formulaire Joueurs les lignes suivantes (me permettant d'afficher mes checkboxes pour les 5 postes que j'ai dans ma BDD):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
$this->widgetSchema['poste_list'] = new sfWidgetFormDoctrineChoice(array(
         'model' => 'Postes',
         'expanded' => true,
         'multiple' => true,
));
 
 
$this->validatorSchema['poste_list'] = new sfValidatorDoctrineChoice(array(
          'model' => 'Postes',
          'multiple' => true
));


L'affichage se déroule correctement, cependant lorsque je soumet mon formulaire seules les champs de la table "Joueurs" sont enregistrés.
Dans ma table postesJoueur rien ne se passe.
Et donc, après soumission les checkboxes cochées redeviennent vides ...

Mon schéma est-il bon dans un premier temps selon vous ?
Ma méthode est-elle la bonne ? Faut-il surcharger une méthode save ? Je suis un peu perdu je m'en remet à votre bon coeur ...

Bon dimanche !
popiiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2012, 19h50   #2
popiiii
Candidat au titre de Membre du Club
 
Homme Thomas
Étudiant
Inscription : mars 2012
Messages : 28
Détails du profil
Informations personnelles :
Nom : Homme Thomas
Âge : 23
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : mars 2012
Messages : 28
Points : 13
Points : 13
Je reformule ma question ...

Un joueur peut avoir plusieurs postes, et un poste peut être occupé par plusieurs joueurs. Je suis donc obligé de faire une table association ?

Cependant comment puis-je proposer par le biais d'un formulaire au jour de choisir les postes qu'il occupe ?
popiiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2012, 13h35   #3
gototog
Membre éprouvé
 
Homme Renaud B
Inscription : septembre 2009
Messages : 361
Détails du profil
Informations personnelles :
Nom : Homme Renaud B
Âge : 23
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : septembre 2009
Messages : 361
Points : 483
Points : 483
essaye de faire pointer ton form choice sur ta table association. Je ne suis pas sur du tout, mais bon


par exemple
Code :
1
2
3
4
5
$this->widgetSchema['poste_list'] = new sfWidgetFormDoctrineChoice(array(
         'model' => 'PostesJoueurs',
         'expanded' => true,
         'multiple' => true,
));
gototog est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h01.


 
 
 
 
Partenaires

Hébergement Web