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

PHP & Base de données Discussion :

[Doctrine] Relation Many To Many


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Par défaut [Doctrine] Relation Many To Many
    bonjour,
    voila mon problème j'ai le schéma suivant :

    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
    Table1:
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
        for_id:
          type: integer(4)
          fixed: false
          unsigned: false
        title:
          type: string(255)
     
    Table2:
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
        for_id:
          type: integer(4)
          fixed: false
          unsigned: false
        title:
          type: string(255)
     
     
    Table3:
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
        for_id:
          type: integer(4)
          fixed: false
          unsigned: false
        title:
          type: string(255)
     
    Association:
      columns:
        for_id::
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
        to_id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
     
    Indication:
      columns:
        to_id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
        title:
          type: string(255)
    A partir de cela, je dois mettre en place les relations de manière à avoir pour les table 1 2 et 3 les Indications correspondantes :
    Table1 0,1 <-> 1,1 Association 0,n <-> 0,n Indication
    Table2 0,1 <-> 1,1 Association 0,n <-> 0,n Indication
    Table3 0,1 <-> 1,1 Association 0,n <-> 0,n Indication
    Je n'arrive pas à trouver la bonne façon, si j'utilise un classRef, Doctrine me fait systématiquement la jointure sur
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Table1.id = Association.for_id
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table1.for_id = Association.for_id
    merci de votre aide,
    Sem

  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
    Si je résume.

    Tu as trois tables (je part de l'idée que les trois tables sont différentes) et tu veux des liaisons n-n passant par une table association vers une table commune.

    A mon avis, il va te falloir une table association par table.

    Dans ton schéma, il n'y a aucun lien de défini, est-ce volontaire ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Par défaut
    bonjour,
    concrètement je pars en fait a l'envers, on m'a donné une Base de données et a partir de ca je veux construire le model.

    j'ai donc 3 tables différentes de "constitution" différente. Elles vont avoir toutes les 3 un champ assindiq_id.
    A coté de ca, j'ai une table d'étiquette avec toute les étiquettes autorisées du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Indication:
      columns:
        indiq_id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
        title:
          type: string(255)
    et donc une table association ( qui serait en principe modélisé avec un classRef ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Association:
      columns:
        assindiq_id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
        indiq_id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
    En fait, j'ai pas mis les associations car je sais pas les faire comme je voudrais du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Table1:
      columns:
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
        title:
          type: string(255)
       relations:
         Indications:
            classref: Association
            local: assindiq_id
            foreign: indiq_id
    Mais si je fais ca, ca va faire une relation sur id et non assindiq_id,
    merci,
    Sem

  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
    De ce que je comprend ton schéma ne peut pas fonctionner.

    Comment la table "association" avec un seul champ "assindiq_id" peut-elle rediriger vers trois tables différente ? Comment peut-elle retrouver vers quel table la liaison doit ce faire ? Comment gérer un "assindiq_id" identique sur deux table différentes qui joindraient vers le même libellé ? Vu le schéma actuel, c'est irréalisable.

    Dans tous les cas, il n'est pas possible de déclarer dans doctrine une triple liaison a partir d'une seul table de liaison. Quoique, avec un champ supplémentaire et en utilisant l'héritage, on devrait y arriver.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Par défaut
    bonsoir,
    concrètement, le système peut fonctionner, je veux récupérer les étiquettes d'une de mes 3 tables je fais en SQL un truc comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT t1.*, i.* 
    FROM Table1 as t1
    LEFT JOIN Association as ass ON t1.assindiq_id = ass.assindiq_id
    LEFT JOIN Indication as i ON ass.indiq_id = i.indiq_id;
    D'ailleurs avec d'octrine une relation type many <-> many marcherait presque sauf que la premiere jointure va se faire sur la clé primaire de t1 et non un champ prédéfini, en gros Doctrine me donnerait ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT t1.*, i.* 
    FROM Table1 as t1
    LEFT JOIN Association as ass ON t1.id = ass.assindiq_id
    LEFT JOIN Indication as i ON ass.indiq_id = i.indiq_id;
    Je vois pas comment lui dire donc que je souhaites que la relation se réalise sur un identifiant choisi et non la clé primaire,
    merci,
    Sem

  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
    L'idéal, pour les nested tables, est d'utiliser les objets doctrine, plutôt que son propre code SQL. En fais, l'idée, avec doctrine, est de ne jamais taper de code SQL, ce qui permet de garantir une indépendance vis-à-vis de la couche base de données.

    La difficulté, avec une relation n-n réflective va être, justement, de gérer les niveaux et les enchainements de requêtes, ce qui ne sera pas le cas d'un arbre.

Discussions similaires

  1. convertir relation many-to-many en many-to-one
    Par djoteck dans le forum Symfony
    Réponses: 3
    Dernier message: 04/10/2017, 10h06
  2. [AC-2007] Problème Relation many-to-many-to-many
    Par Synystrose dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/08/2015, 10h57
  3. 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
  4. [Doctrine] Relation many to many sur la même table
    Par hmartin.fr dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 01/09/2011, 09h41
  5. Un peu de mal a comprendre le concepte "one-to-many" et "many-to-many"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/03/2007, 18h50

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