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 :

Formulaire et pseudo relation n-n (n-1 + 1-n)


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 50
    Par défaut Formulaire et pseudo relation n-n (n-1 + 1-n)
    Bonjour,

    Je suis un peu perdu avec un cas qui me semble assez classique. J'ai fais pas mal de recherches, mais ça ne m'aide pas trop.

    Voici mon cas : une base pour enregistrer des événements indésirables. Pour simplifier, il y a 3 étapes dans un process et un événement indésirable peut survenir sur 1 ou plusieurs étapes.

    Le schéma de la base :


    Le schema.yml :
    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
    Etape:
      connection: doctrine
      tableName: etape
      columns:
        etp_id_pk:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
        etp_nom:
          type: string(45)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
      relations:
        ListeEtape:
          local: etp_id_pk
          foreign: lep_etape
          type: many
    Evenement:
      connection: doctrine
      tableName: evenement
      columns:
        evt_evenement_id_pk:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
        evt_victime:
          type: string(45)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
      relations:
        ListeEtape:
          local: evt_evenement_id_pk
          foreign: lep_evenement
          type: many
    ListeEtape:
      connection: doctrine
      tableName: liste_etape
      columns:
        lep_evenement:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
        lep_etape:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: false
        lep_incriminee:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
      relations:
        Etape:
          local: lep_etape
          foreign: etp_id_pk
          type: one
        Evenement:
          local: lep_evenement
          foreign: evt_evenement_id_pk
          type: one
    Mon objectif est de pouvoir faire un CRUD sur les événements en déclarant les étapes.
    J'ai généré un module evenement, je peux donc faire un CRUD tout simple pour les événements.

    Maintenant, je veux que quand je crée un nouvel événement, je puisse déclarer les étapes incriminées.

    Là les choses se gâtent.

    Dans /lib/form/doctrine/base/BaseEvenementForm.class.php , j'ai tenté d'ajouter un formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      public function setup()
      {
        ...
    	$this->mergeForm(new ListeEtapeForm());
    Comme ça, je peux ajouter 1 étape... mais il faudrait que je puisse afficher 3 étapes.

    Est-ce que quelqu'un pourrait me donner quelques billes de méthodologie? Quelques mots clés pour des recherche aussi.

    Merci

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Doctrine et symfony considère qu'une liaison n-n n'a pas à proprement parlé de table intermédiaire. (MLD)

    Mais sans cette table c'est irréalisable physiquement (MPD).

    Donc il faut une table, mais cette table doit avoir un format très particulier, elle ne peut comporter que deux champs (les deux clefs) tous les deux clefs primaire et la liaison doit se faire de cette table vers les deux autres et d'une des deux autres tables normale vers l'autre avec le paramètre "refClass" qui indique la table de liaison.

    Toutes autre configuration est vouée à l'échec.

    Dans ton modèle tu ne définis pas une liaison n-n, mais deux liaison 1-N avec la table liste étapes comme table pivot.

    Traite les ainsi et tout devrait marcher.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    Je suis débutant aussi j'espère pouvoir t'aider,
    pour afficher les enregistrements de la table Etape il faut que tu ajoute dans ton schema.yml un foreignAlias puis que tu fasse dans ton evenementForm.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->embedRelation('ton_foreignAlias')
    tout simplement

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Le schéma ainsi défini ne correspond pas à une relation n-n.

    Donc, soit on en fait une relation n-n en supprimant le champ excédentaire et en corrigeant les relations ; soit le champ supplémentaire est indispensable et on n'a pas de relation n-n mais deux relation 1-n et n-1.

    Quant le shema sera juste, on pourra toujours essayer de trouver la manière d'afficher les enregistrements. Là, tu vas lui laisser l'espoir de pouvoir faire fonctionner un n-n qui n'en est pas un.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 267
    Par défaut
    oui effectivement j'ai eu le même dilemme, il faut que tes relations soit adaptées comme symfony le souhaite sinon ça ne peut pas marcher.

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Fondamentalement c'est doctrine qui serait a cheval sur les règles.

    Mais il a parfaitement raison. La relation n-n ne peut s'entendre que dans un MLD. Au niveau physique elle doit être "aidée" par une table. Et cette table ne peut comporter que les deux clef en champs. Si non, la donnée complémentaire ne peux trouver place dans le MLD et il faut donc le reprendre.

Discussions similaires

  1. pour les formulaires et les relations
    Par chettane dans le forum Access
    Réponses: 2
    Dernier message: 20/02/2011, 13h34
  2. [1.x] Formulaire imbriqués avec relation n-n
    Par momo10 dans le forum Symfony
    Réponses: 14
    Dernier message: 14/06/2010, 14h57
  3. Formulaire et pseudo-frame
    Par Melex dans le forum Langage
    Réponses: 9
    Dernier message: 28/04/2010, 11h47
  4. Formulaire rempli par Relation ?
    Par RudyWI dans le forum IHM
    Réponses: 6
    Dernier message: 24/04/2008, 10h18
  5. Formulaire(s) pour relations plusieurs à plusieurs
    Par Kareg dans le forum Modélisation
    Réponses: 7
    Dernier message: 01/09/2007, 14h22

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