7

在 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'

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

4

1 回答 1

15

看来您必须分两步进行(来自手册):

$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列提供您自己的“子项”条件。

于 2009-10-21T04:32:03.053 回答