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] auto référence sur une table


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Points : 38
    Points
    38
    Par défaut [Doctrine] auto référence sur une table
    Bonjour,

    Je n'arrive pas à faire une relation one-to-many d'une table sur elle même.

    J'ai une table Toc (Table of contents) comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    toc:
      columns:
        id: {type : integer, primary: true }
        parent_id: {type:integer, notnull: true }
        name: ...
    Je ne trouve pas comment spécifier dans le schema.yml de doctrine comment matérialiser la relation id <-> parent_id où parent_id permet de trouver la rubrique parent de la courante .

    Merci d'avance de votre aide.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Hello,

    pas bien compris, mais si ce dont tu parles c'est que l'id parent pointe sur la meme table, sous propel ce serait quelque chose du genre

    id_parent: { type: integer, foreignTable: toc, foreignReference: id, required: true }
    En revanche la tu es sous doctrine. Je sais pas ...

    Ca sert peut etre a rien ce que je viens de te dire

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 117
    Points : 123
    Points
    123
    Par défaut
    Ce n'est pas réellement clair... parent_id c'est une clé étrangère ou pas?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Si j'ai bien compris, c'est une structure hiérarchique que tu veux mettre en place.

    Moi je ferais comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    toc:
      columns:
        id: ...
        parent_id:
      relations:
        Parent:
          class: toc
          local: id
          foreign: parent_id
          foreignAlias: Enfants
    Ceci permettra à un objet toc d'appeler un getter getParent() pour avoir son parent, ainsi qu'un getter getEnfants() pour avoir ses enfants.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Points : 38
    Points
    38
    Par défaut
    désolé de ne pas avoir été clair.

    WhiteD a parfaitement compris ce que je voulais. Mais je ne peux tester maintenant. Je ferai demain.

    Pour les autres je complète pour être plus clair:

    Je souhaite une relation hiérachique comme suit:

    • T1
      • T1.1
      • T1.2
      • T1.3
    • T2
    • T3


    où chaque ligne est une ligne dans la table. et pour faire la relation entre T1.1 et T1 on note que l'id de T1 est n et parent_id de T1.1 est n

    j'espère avoir été plus clair.

    Merci.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Points : 38
    Points
    38
    Par défaut
    Ca ne fonctionne pas correctement. Je pense que le problème est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <ul><li style="">racine
    <ul><li style="">niveau 1</li></ul></li></ul>
    L'élément racine a pour parrent lui-même dans mon modèle c'est à dire que l'enregistrement est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    id: n
    parent_id: n
    title: racine
    Pour déterminer la valeur de n il faut enregister dans la base pour générer la valeur de l'id puis prendre cette valeur et mettre à jour parent_id. Ce que doctrine ne peut faire ou que je ne sais pas lui expliquer.

    Donc je par sur l'idée de renseigner l'élément racine moi-même mais ca ne fonctionne pas il me renvoi l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Invalid row dkey specified: , refererred to in racine

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Points : 38
    Points
    38
    Par défaut
    Pour compléter la résolution de mon problème.

    J'ai appliqué la solution proposé par WhiteD qui a fonctionné. Cependant pour le sommet de la hiérachie je voulai que le pointeur sur le parent de la racine pointe sur la racine. Pour ce faire j'ai défint id et parent à 0. Ce qui a provoqué l'erreur de mon précédent message.

    Pour résodure il m'a suffit de mettre id et parent à 1. Cependant je suppose que cela marche car l'auto incrémente positionne par défaut le premier enregistrement à 1.

    Avec 0 j'ai l'impression qu'il positionnait le premier élément à id=1 et par conséquence la contrainte de clé étrangère id <->* parent bloquait.

    Je rappelle que c'est un problème de remplissage de la table par fixtures.

Discussions similaires

  1. Auto-référence dans une table
    Par Franck.H dans le forum Débuter
    Réponses: 9
    Dernier message: 22/05/2013, 11h48
  2. Auto jointure (sur une même table)
    Par freestyler dans le forum Langage SQL
    Réponses: 16
    Dernier message: 20/05/2008, 15h16
  3. Requete Auto jointure sur une table
    Par Guillaume 78 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/11/2007, 09h26
  4. [MySQL] creation de formulaire auto basé sur une table
    Par mj.mj12 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 08/11/2007, 14h31
  5. Pb d'auto-incrément sur une table v7
    Par Nivux dans le forum Paradox
    Réponses: 9
    Dernier message: 26/12/2002, 12h05

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