我以爲我會爲我的菜單使用樹行爲作爲手冊中的建議,但我越來越困惑。CakePHP 3:樹中的行爲範圍
我想能夠檢索基於當前控制器,我可以從請求對象獲取菜單數據。
我想如果我有,我可以使用設置在飛行的樹行爲範圍:
$this->behaviors()->Tree->config('scope', ['country_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' => 'MyTreeTitle']);
$this->MyModel->find('threaded')->toArray();
,正如我說,在我的表,而不僅僅是標題的定義範圍相匹配的返回兩個獨立的樹前。
此外,我已經手動檢查了lft和rght的值,以確保它們是正確的,它們似乎是。
我真的很感謝這一個幫助,因爲我非常困惑。
編輯
我已經做了一點小提琴演奏和部分上面是錯誤的。
我輸出的
$this->MyModel->find('children', ['for' => 1]);
的樹形列表,並與範圍的結果集,它實際上只是回到我想找到爲孩子的節點。我期望範圍基於唯一值返回單個節點和子節點。在重新閱讀手冊幾次之後,現在已沉入其中,它只返回包含範圍值的行。不知道在樹數據上下文中,除非有國家層次結構(在手冊的情況下),而不是諸如countries-> cities-> landmarks之類的東西,這對於樹數據上下文是如何有用的。
任何人都可以告訴我,如果這是打算的行爲?
我還應該提到我正在使用Postgresql。也許這是一個因素。
乾杯