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

ORM PHP Discussion :

Incohérence du NestedSet


Sujet :

ORM PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par défaut Incohérence du NestedSet
    Bonjour à tous.

    Dans mon backend, je suis confronté à un énorme problème que je n'arrive pas à résoudre après plusieurs jours de galère. J'utilise la fonctionnalité NestedSet de Doctrine pour gérer un arbre de catégorie.

    Le problème c'est que j'ai de véritables incohérences. L'une d'elles, la plus chiante, c'est que je n'arrive pas à aller plus loin que le level 1.

    J'arrive à créer :
    Parent
    - Enfant 1
    - Enfant 2

    Mais si j'ajoute un nouvel enfant, ça me le renvoie au parent.
    Parent
    - Enfant 1
    - Enfant 2
    - Sous-enfant de enfant 1

    Nom : 357921.png
Affichages : 61
Taille : 6,7 Ko

    Nom : 357920.png
Affichages : 66
Taille : 11,1 Ko

    J'ai intégralement repris le code de ce blog qui intègre un github du code à jour :
    http://redotheoffice.com/?p=74

    Je soupçonne mon doSave() qui ne sait pas se comporter correctement.

    Ci-joint vous avez mon CatForm.class.php qui gère toute la partie form & traitement de cette partie.

    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
    <?php
    class CatForm extends BaseCatForm
    {
      protected $parentId = null;
     
      public function configure()
      {
        unset($this['parent'], $this['lft'], $this['rgt'], $this['level']);
        $this->widgetSchema['parent_id'] = new sfWidgetFormDoctrineChoice(array(
          'model' => 'cat',
          'add_empty' => '~ (object is at root level)',
          'order_by' => array('parent, lft',''),
          'method' => 'getIndentedName'
          ));
        $this->validatorSchema['parent_id'] = new sfValidatorDoctrineChoice(array(
          'required' => false,
          'model' => 'cat'
          ));
        $this->setDefault('parent_id', $this->object->getParent());
        $this->widgetSchema->setLabel('parent_id', 'Child of');
      }
     
      public function updateParentIdColumn($parentId)
      {    
        $this->parentId = $parentId;
        // further action is handled in the save() method
      }  
     
      protected function doSave($con = null) {
        parent::doSave($con);
     
        $node = $this->object->getNode();
     
        if ($this->parentId != $this->object->getParent() || !$node->isValidNode()){
          if (empty($this->parentId)) {
            //save as a root
            if ($node->isValidNode()) {
              $node->makeRoot($this->object['id']);
              $this->object->save($con);
            }
            else
              $this->object->getTable()->getTree()->createRoot($this->object); //calls $this->object->save internally
          }
          else {
            //form validation ensures an existing ID for $this->parentId
            $parent = $this->object->getTable()->find($this->parentId);
            $method = ($node->isValidNode() ? 'move' : 'insert') . 'AsLastChildOf';
            $node->$method($parent); //calls $this->object->save internally
          }
        }
      }
    }
    Merci d'avance !

  2. #2
    Membre émérite Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Par défaut
    alors voice que j'ai trouvé dans la doc : http://www.doctrine-project.org/proj...3Anestedset/en

    Quel est ton schema.yml ? C'est un behavior de doctrine donc il faut vraiment les meme champs dans la table.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par défaut
    Merci pour ta réponse !

    Voilà mon schema
    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
    Cat:
      connection: doctrine
      tableName: cat
      actAs:
        NestedSet:
          hasManyRoots: true
          rootColumnName: parent
      columns:
        idcat:
          type: integer(4)
          fixed: false
          unsigned: true
          primary: true
          autoincrement: true
        titre:
          type: string(45)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        image:
          type: string(255)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
      relations:
        Parent:
          local: parent
          foreign: idcat
          class: Cat
          foreignAlias: Children
          foreignType: many
          foreignClass: Cat
        Produits:
          local: idcat
          foreign: cat
          type: many

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par défaut
    Petit changement : j'ai viré la relation "Parent" qui restait dans mon schema (avant que je découvre le NestedSet), j'ai tout rebuildé.

    Maintenant quand je créé un parent, je ne peux plus le supprimer ("Integrity constraint violation").

    Mais le problème principal reste d'actualisé malheureusement.

  5. #5
    Membre émérite Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Par défaut
    Tu as de la change je suis confronté au meme problème, malheurement pour moi je suis suis pas sur un projet from scratch donc je ne peux pas l'appliquer.

    Voilà le lien : http://www.doctrine-project.org/docu...rarchical-data

    Il y a bien des champs obligatoire.

Discussions similaires

  1. incohérence du code
    Par molesqualeux dans le forum C
    Réponses: 7
    Dernier message: 05/11/2005, 14h24
  2. [requête] Incohérence de type
    Par Virgile59 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 03/11/2005, 13h43
  3. Erreur 6502 : incohérence ?
    Par szdavid dans le forum Oracle
    Réponses: 16
    Dernier message: 08/04/2005, 15h25
  4. Résultat incohérent de pow, sqrt
    Par PierrotY dans le forum C++
    Réponses: 15
    Dernier message: 16/03/2005, 12h07
  5. Incohérence des textures sous OpenGL
    Par Nicuvëo / Calëtunda dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/12/2004, 10h27

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