如何搜索 Doctrine NestedSet?

发布于 2024-10-07 07:51:08 字数 2050 浏览 0 评论 0原文

我如何在嵌套集中搜索,并以树结构恢复过滤后的数据?

示例:

|
类别1:

  • 子类别1
  • 子类别2
  • 子类别3 cat2:
  • subcateg1
  • subc2

我搜索“subc2”。

|
cat2:

  • subc2

这是我的测试表的固定装置:

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

这是我的尝试:

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

我想要节点和所有祖先。

How can i searching in nested set, and recover the filtered data in tree structure?

example:
root
|
cat1:

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

I search the 'subc2'.
root
|
cat2:

  • subc2

This is my fixtures for the test table:

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

And the table definition:

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

And this my attempt:

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

I want the node(s), and all ancestors.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

双马尾 2024-10-14 07:51:08

我会这样:

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

i would so:

$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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文