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] 2 relations vers la même table


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 71
    Par défaut [Doctrine] 2 relations vers la même table
    Bonjour à tous !

    Je découvre actuellement symfony, et je suis bluffé par ces capacités ... Mais cependant, il me reste un probléme que je n'arrive pas à élucider.

    J'ai sur mon mcd 2 relations pointant vers la meme table, du genre :

    Profil (id, nom, prenom)
    Commentaire(id, commentaire, #id_du_commenté, #id_du_commenteur)

    #id_du_commenté et #id_du_commenteur faisant tout 2 référence à id de la table profil.

    Doctrine arrive trés bien à generer la BDD pour prendre cela en compte, mais cela se corse quand j'essaie d'ajouter des données.

    Je me retrouve en effet dans mon .yml avec la forme suivante :

    Commentaire:
    Commentaire1
    Profil: profil1
    Profil: profil2
    commentaire: Yes !

    Et doctrine ne différencie pas les 2 "Profils".

    Quelqu'un connait une solution ?

    Merci d'avance !

  2. #2
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    j'aurais fais çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // tables principales
    Profil(id, nom, prenom)
    Commentaire(id, commentaire)
    
    // tables de liaison
    ProfilCommente(id_commentaire, id_profil)
    ACommente(id_commentaire, id_prodil)

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 28
    Par défaut
    Bonjour à tous,

    moi j'ai un soucis dans le même genre. Pour faire simple il s'agit d'un site de vente du type ebay.
    J'ai donc trois tables (parmis tant d'autres), la table Objet (qui décrit une annonce), la table User qui décrit un utilisateur et la table Achete qui fait la relation entre un utilisateur, une annonce et un montant d'enchere max.

    J'ai besoin qu'il y ait plusieurs relations entre les tables Objet et User :
    La table Objet contient un champ gagnant et un champ vendeur avec deux relations vers l'id utilisateur et la table Objet a une troisième relation vers la table User à travers la table Achete.

    Comment puis-je créer deux relations vers une même table dans mon yml ?

    Si je fais comme ça :
    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
    User: 
     actAs: 
      Timestampable: ~
     columns: 
      pseudo: { type: string(12), unique: true }
      mdp: { type: string(20), notnull: true }
    [ ... ]
     relations: 
      Objet: { refClass: Achete, local: user_id, foreign: objet_id }
    
    Objet: 
     actAs: 
      Timestampable: ~
     columns: 
      titre_objet: { type: string(50), notnull: true }
      description: { type: clob }
    [ ... ]
      vendeur_id: { type: integer, notnull: true }
      gagnant_id: { type: integer }
     relations: 
      User: { onDelete: CASCADE, local: vendeur_id, foreign: id }
      User: { onDelete: CASCADE, local: gagnant_id, foreign: id }
      User: { refClass: Achete, local: objet_id, foreign: user_id } 
    
    Achete: 
     actAs: { Timestampable: ~ }
     columns: 
      user_id: { type: integer, primary: true }
      objet_id: { type: integer, primary: true }
      prix: { type: integer(11), notnull: true }
    En gras les 3 relation vers la même table User. Bien évidement ça ne fonctionne pas, il prend en compte que la dernière.

    J'ai beau cherché je ne trouve pas...

    Merci

  4. #4
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    Je répondrais de la même façon qu'au premier post. Je créerai d'autres tables. Décomposer c'est simplifier (sans en abuser...).

    Par exemple, au lieu de mettre vendeur_id dans objet, je créerais une table Vente (id_objet, id_vendeur, ...)

    Et ainsi de suite.

    Pour finir, sais-tu que si tu utilises les conventions de nommages, tu n'as pas besoin de déclarer explicitement toutes ces relations ? Ton YAML pourrait être beaucoup plus simple, doctrine retrouve ces relations...

    En espérant t'avoir aidé

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 28
    Par défaut
    Oui je pense pouvoir m'en sortir en décomposant et en créant de nouvelle tables...

    Que veux tu dire par conventions de nommages ?
    Je veux bien un lien vers de la doc si tu as j'ai du mal a trouver des trucs sérieux...

  6. #6
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    C'est simple. Par exemple, tu as :

    Membre (id, login, pass...)
    Post (id, membre_id...)

    En nommant membre_id, doctrine comprend que c'est une relation vers la table membre, champ id. C'est un exemple ^^.

    abbreviated-syntax

Discussions similaires

  1. Deux jointures vers la même table ?
    Par JYFJYF dans le forum Requêtes
    Réponses: 9
    Dernier message: 27/01/2010, 16h02
  2. Réponses: 0
    Dernier message: 23/07/2009, 15h45
  3. Plusieurs jonctions vers la même table
    Par Leduc08 dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/11/2008, 09h32
  4. copie d'une ligne d'une table access vers le méme table
    Par FST_PFE dans le forum VBA Access
    Réponses: 4
    Dernier message: 31/10/2008, 10h23
  5. Relation dans une même table
    Par Ylias dans le forum JPA
    Réponses: 5
    Dernier message: 29/05/2008, 10h36

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