2015-11-19 24 views
2

我以爲我會爲我的菜單使用樹行爲作爲手冊中的建議,但我越來越困惑。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。也許這是一個因素。

乾杯

回答

0

您必須添加項目範圍的..

喜歡的東西

$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() 

#cakephprullz