2010-12-10 45 views
1

我如何搜索嵌套集,並恢復樹結構中的過濾數據?如何搜索一個Doctrine NestedSet?

示例:

|
CAT1:

  • subcat1
  • subcat2
  • subcat3 CAT2:
  • subcateg1
  • subc2

我搜索 'subc2'。
root
|
CAT2:

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 

而且表定義:

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

這我嘗試

  • subc2

這是我爲測試表夾具:

 $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); 
      } 

我想節點和所有的祖先。

+0

什麼是你的代碼基礎是什麼?你試過什麼了?您在設置「嵌套集」時遇到困難,或者只想知道如何查詢數據庫? – DrColossos 2010-12-12 15:03:46

+0

@DrColossos:我只有如何在嵌套集合中搜索纔有問題。 – turbod 2010-12-13 13:38:48

回答

0

我就這麼:

$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;