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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    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 éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

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

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    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
    Membre confirmé
    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
    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
    Membre confirmé
    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
    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
    Membre confirmé
    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
    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