代码之家  ›  专栏  ›  技术社区  ›  nickf

在cakephp树中查找子树

  •  7
  • nickf  · 技术社区  · 15 年前

    在cakephp中,如何只选择模型中的子树 actsAs 树?

    我试过这个,想找到一棵以 label = "My Label"

    $this->find("threaded", array(
        "conditions" => array(
            "label" => "My Label"
        )
    ));
    

    …但是查看日志时,它运行此SQL:

    SELECT Menu.id, Menu.parent_id, Menu.lft, Menu.rght, Menu.label, Menu.link
    FROM menus Menu
    WHERE label = 'My Label'
    

    它显然只选择一个节点,而不是它的所有子节点。

    1 回复  |  直到 9 年前
        1
  •  15
  •   bancer    9 年前

    似乎你必须分两步来完成(从 the manual ):

    $parent = $this->Category->find('first', array(
        'conditions' => array('label' => 'My label')
    ));
    $parentAndChildren = $this->Category->find('threaded', array(
        'conditions' => array(
            'Category.lft >=' => $parent['Category']['lft'], 
            'Category.rght <=' => $parent['Category']['rght']
        )
    ));
    

    你不能用 'label' => 'my label' 条件 threaded 调用,因为它只会找到符合该条件的结果,父级和子级。 'threaded' 仅根据 parent_id 因此,你必须通过使用 lft / rght 柱。