IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Sauvegarde d'un formulaire imbriqué "table association many to many"


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    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 : 23
    Points
    23
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    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 : 23
    Points
    23
    Par défaut
    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 ?

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    essaye de faire pointer ton form choice sur ta table association. Je ne suis pas sur du tout, mais bon


    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $this->widgetSchema['poste_list'] = new sfWidgetFormDoctrineChoice(array(
             'model' => 'PostesJoueurs',
             'expanded' => true,
             'multiple' => true,
    ));

Discussions similaires

  1. Classe d'association, scaffolding et Many to many
    Par flotho dans le forum Grails
    Réponses: 0
    Dernier message: 09/02/2012, 18h56
  2. Réponses: 5
    Dernier message: 12/08/2011, 08h59
  3. [Doctrine] Formulaire de création pour table Association
    Par YodMorior dans le forum ORM
    Réponses: 9
    Dernier message: 09/03/2011, 17h07
  4. [1.x] formulaire imbriqué relation n:n table de jointure
    Par symfony30000 dans le forum Symfony
    Réponses: 15
    Dernier message: 27/04/2010, 14h12
  5. Réponses: 12
    Dernier message: 09/05/2008, 08h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo