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 :

Relation Many to Many et colonnes dans la table association


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 124
    Par défaut Relation Many to Many et colonnes dans la table association
    Bonjour,

    J'explique, j'ai des relations N..N avec des colonnes dans les tables associations et j'aimerai savoir comment gérer ce cas. J'ai lu par-ci par-là que c'était plutôt compliqué ?

    J'ai essayé embedForm et embedRelation mais le résultat n'est pas probant. Dans un cas, j'ai rien qui s'affiche, dans l'autre seulement la colonne de la table association.

  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
    Es-tu sure de ton shema.yml ? Une erreur dedans et tous tes essais tomberont à l'eau.

    Tu as deux possibilités. Soit tu veux juste avoir des listes d'un ou des deux côtés pour dire qui est en relation avec qui, tu as un widget qui permet de gérer ce type de relations facilement.

    Si tu veux faire de l'édition tu as un plugin qui permet de gérer correctement les embed, regarde dans la salle plugin, dans le sujet épinglé.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 124
    Par défaut
    Mes relations ne sont définis que d'un côté et dans la table association j'ai deux relations 1-N, enfin un schéma vaut mieux que des explications :

    La table association avec une donnée, c'est cette donnée que je veux pouvoir gérer quand j'ajoute un champs dans cette table à partir du formulaire d'une personne :
    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
    PersonActivity:
      connection: doctrine
      tableName: person_activity
      columns:
        person_id:
          type: integer
          primary: true
        activity_id:
          type: integer
          primary: true
        special_status:
          type: enum(18)
          values:
            - Coordinator
            - 'Deputy Coordinator'
            - 'Task Leader'
            - 'Science Manager'
            - 'Technical Manager'
            - Expert
      relations:
        Person:
          class: sfGuardUserProfile
          local: person_id
          foreign: id
          onDelete: CASCADE
        Activity:
          local: activity_id
          foreign: id
          onDelete: CASCADE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    sfGuardUserProfile:
      actAs:
        Timestampable: ~
      columns:
    ...
      relations:
    ...
        Activities:
          class: Activity
          local: person_id
          foreign: activity_id
          refClass: PersonActivity
          foreignAlias: Persons
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Activity:
      connection: doctrine
      tableName: activity
      columns:
        id:
          type: integer
          primary: true
          autoincrement: true
    ...
      relations:
    ...
    J'ai regardé un peu le README du plugin ahDoctrineEasyEmbeddedRelations mais il montre un exemple de relation 1-N, ca fonctionne avec les relations N-N?

  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
    Pour ce qui est des morceaux de schéma, quelques réflexions à la volée :
    • Toutes les relations devraient avoir un paramètre foreignAlias. D'autre indiqués sont les valeurs par défaut, pas nécessaire, mais ne nuisent pas.
    • Dans un lien qui fait référence pont pour une relation n-n il ne faut pas utiliser 'local' et 'foreign' (je sais, on le trouve dans la doc, pourtant l'expérience prouve que cela met le bordel).
    • Attention aux liaisons n-n avec des attributs, doctrine les gères mal. Il est souvent préférable de les considérer comme deux liaisons 1-n et n-1
    • Il faut éviter les champs de type enum, lourd à gérer et lourd à maintenir. Un champ de type integer et un tableau défini dans le modèle permettent la même facilité pour stocker les données et un bon usage des widget et validator select. De plus, rajouter une option n'implique pas une modification de structure de la base.


    Pour le plugin, il ne gère que les 1-n. Il permet donc de lier des enregistrements avec leur attribut et le vis-à-vis. Je ne vois pas trop comment tu pourrais gérer plus sur un écran.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 124
    Par défaut
    Merci pour tes conseils. Je vais compléter/modifier mon schéma, juste une remarque, dans mon cas, la clé dans la table association est person_id alors que le nom de la table avec le refClass est sfGuardUserProfile, si je lui indique pas au moins local, il retrouve la bonne clé ou je dois modifier ma clé dans la table association ?

    Pour mettre en place les deux relations 1-n 1-n, je dois simplement supprimer la relation n-n non ?
    Et ensuite, j'utilise le plugin pour lié les relations dans les formulaires ?

  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
    Dans le cas d'une relation n-n et du lien directe entre les deux tables, il utilise les liens déclaré sur la table de relation pour récupérer les enregistrement, table déclarée avec refClass. Dans ce cas "local" n'a pas d'intérêt.

    En règle général, il va pouvoir remplir automatiquement "local" en fonction du modèle. Ce que tu décris pour ta liaison est une exception qui va obliger à saisir "local" dans le shema.yml. Pour la relation depuis la table de liaison, pas pour le raccourci entre les deux tables n-n.

    Si tu utilises le raccourci entre les deux tables n-n, les propriétés du liens ne sont pas accessibles. Dans certains cas, cela peut être pratique, il faut alors garder cette liaison de raccourci, dans d'autre cas, c'est un danger, il faut alors supprimer ce lien. A toi de voir suivant ton application et l'utilisation de tes données.

    Pour le formulaire, il faudrait savoir ce que tu veux y mettre et comment.

Discussions similaires

  1. PGSQL-EclipseLink Relation One To Many et Many To One
    Par faitor1 dans le forum Persistance des données
    Réponses: 0
    Dernier message: 30/01/2015, 19h46
  2. [2.x] Relation many-to-many se pointant elle-même dans un schema YAML
    Par Crusider dans le forum Symfony
    Réponses: 1
    Dernier message: 12/06/2014, 14h37
  3. Réponses: 3
    Dernier message: 29/12/2010, 08h55
  4. Données d'une table deviennent colonne dans autre table?
    Par christophe1245 dans le forum Access
    Réponses: 8
    Dernier message: 19/12/2005, 22h01
  5. Ajout d'une colonne dans une table ...
    Par Djedjeridoo dans le forum SQL
    Réponses: 2
    Dernier message: 22/07/2003, 16h12

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