Tree CakePHP 3:树行为中的作用域

Tree CakePHP 3:树行为中的作用域,tree,cakephp-3.0,cakephp-3.x,Tree,Cakephp 3.0,Cakephp 3.x,我原以为我会像手册建议的那样在菜单中使用树行为,但现在我越来越困惑了 我希望能够检索菜单数据的基础上,当前控制器,我可以从请求对象 我想如果我有,我可以使用以下方法设置树动态行为的范围: $this->behaviors()->Tree->config('scope',['country\u name'=>'France']); 我想从那里我可以选择所有节点,如下所示: $this->MyModel->find('all')) 但这会回报一切 我在手册中看到,范围限制了所有操作的范围,因此这

我原以为我会像手册建议的那样在菜单中使用树行为,但现在我越来越困惑了

我希望能够检索菜单数据的基础上,当前控制器,我可以从请求对象

我想如果我有,我可以使用以下方法设置树动态行为的范围:

$this->behaviors()->Tree->config('scope',['country\u name'=>'France']);
我想从那里我可以选择所有节点,如下所示:

$this->MyModel->find('all'))
但这会回报一切

我在手册中看到,范围限制了所有操作的范围,因此这是一个混乱的领域

我也试过了

$this->MyModel->find('threaded'))
但这会回报一切

很好,它返回了整个树,因为它显示了我至少部分做对了

真正奇怪的是:

$this->MyModel->find('children',['for'=>1]);
只要不设置范围,它就会返回我所期望的结果。如果我设置id为1的树的作用域,则得到一个空数组

总而言之。这是我在视图单元格中使用的代码

$this->loadModel('MyModel');
$this->MyModel->behaviors()->Tree->config('scope',['title'=>'mytreetle']);
$this->MyModel->find('threaded')->toArray();
正如我之前所说,它返回表中两个独立的树,而不仅仅是标题与定义范围匹配的树

此外,我还手动检查了lft和rght值,以确保它们是正确的,并且看起来是正确的

我真的很想在这个问题上得到一些帮助,因为我非常困惑

编辑

我做了更多的修改,上面的部分内容是错误的

我输出结果

$this->MyModel->find('children',['for'=>1]);
作为树列表并设置范围,它实际上只返回我要查找其子节点的节点。我希望作用域基于唯一值返回单个节点和子节点。在多次重读该手册之后,它现在已经意识到它只返回包含范围值的行。不确定这在树数据上下文中如何有用,除非您有一个国家的层次结构(在手册中),而不是像国家->城市->地标这样的东西

有人能告诉我这是否是故意的行为吗

我还应该提到我正在使用Postgresql。也许这是一个因素


干杯

您必须添加范围内的项目

差不多

$table= \Cake\ORM\TableRegistry::get('Plugin.Table');
$table->behaviors()->Tree->config('scope', ['Table.scope' => $scope]);
/* where scope is the country_name or title in your case */
$row = $table->newEntity();
$row = $table->patchEntity($row, ['your_row_column'=>'row_column_data'])
$table->save($row)
要检索项目,只需执行以下操作

        $this->Table->find('children', [
            'contain'=>'SomethingRelated', 
            'for' => $table_row_id 
        ])->find('threaded')->toArray()