在CakePHP树中查找子树

时间:2009-10-21 00:50:48

标签: php cakephp tree mptt

在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 个答案:

答案 0 :(得分:15)

看来你必须分两步这样做(来自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 / {{提供您自己的“孩子”条件。 1}}列。