2010-12-10 38 views
1

Comment puis-je effectuer une recherche dans un ensemble imbriqué et récupérer les données filtrées dans une structure arborescente?Comment rechercher un Doctrine NestedSet?

Exemple:
racine
|
cat1:

  • subcat1
  • subcat2
  • subcat3 cat2:
  • subcateg1
  • subc2

Je recherche le 'subc2'.
racine
|
cat2:

  • subc2

Ce sont mes accessoires pour la table de test:

FokonyviKategoria: 
    fok0: 
    megnevezes: Főkönyvi kategóriák 
    children: 
     fok1: 
     megnevezes: Főkönyvi teszt 1 
     fok2: 
     megnevezes: Főkönyvi teszt 2 
     fok3: 
     megnevezes: Főkönyvi teszt 3 
     children: 
      fok4: 
      megnevezes: Főkönyvi teszt 4 
      fok5: 
      megnevezes: Főkönyvi teszt 5 

Et la définition de table:

FokonyviKategoria: 
    actAs: 
    NestedSet: 
     hasManyRoots: false 
    columns: 
    megnevezes: string(255) 
    relations: 
    Szamlak: 
     type: many 
     local: id 
     foreign: fokonyvi_kategoria_id 
     foreignAlias: FokonyviKategoria 

Et cette ma tentative:

 $treeObject = Doctrine_Core::getTable('EszkozKategoria')->getTree(); 
      $q = Doctrine_Query::create() 
       ->select('e.megnevezes') 
       ->from('EszkozKategoria e') 
       ->where('megnevezes LIKE "%fúró%"'); 
      $treeObject->setBaseQuery($q); 
      $tree = $treeObject->fetchTree(); 
      $treeObject->resetBaseQuery(); 
      $query = $treeObject->getBaseQuery(); 
      $query->setHydrationMode(Doctrine_Core::HYDRATE_ARRAY_HIERARCHY); 
      $treeObject->setBaseQuery($query); 

      foreach ($tree as $node) { 
       //$treeObject2 = Doctrine_Core::getTable('EszkozKategoria')->getTree(); 
       //$tmp = $treeObject2->fetchBranch($node->id, array('depth' => 3), Doctrine_Core::HYDRATE_ARRAY_HIERARCHY); 
       //var_dump($tmp); 
       //echo $node->getNode()->getPath('/', true) . "\n"; 
       $a = $node->getNode()->getAncestors(); 
       var_dump($a); 
      } 

Je veux le (s) noeud (s), et tous les ancêtres.

+0

Quelle est votre base de code? Qu'avez-vous essayé jusqu'à présent? Avez-vous des difficultés à configurer le "jeu imbriqué" ou voulez-vous simplement savoir comment interroger la base de données? – DrColossos

+0

@DrColossos: J'ai un problème seulement comment chercher dans l'ensemble imbriqué. – turbod

Répondre

0

et je voudrais donc:

$listLeaf = FokonyviKategoriaTable::getInstance()->createQuery() 
    ->where('level = ?', 2) //all leaf 
    ->fetchArray(); 
$list = array(); 
foreach ($listLeaf as $id => $node) { 
    $list[$node['id']] = $nade['megnevezes']; 
    $list['ancestors'] = $node->getNode()->getAncestors(); 
} 
return $list;