2015-11-19 5 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, чтобы убедиться, что они верны, и они кажутся.

Было бы очень полезно помочь в этом, так как я монументально смущен.

EDIT

Я сделал немного больше пустячный и часть выше неправильно.

I выход результат

$this->MyModel->find('children', ['for' => 1]); 

как TreeList и с областью установить это на самом деле просто возвращает узел я хочу найти детей для. Я ожидал, что область действия вернет единственный узел и дочерние элементы, основанные на уникальном значении. После повторного чтения руководства несколько раз он теперь потоплен тем, что он возвращает ТОЛЬКО строки, которые содержат значение области. Не знаете, как это полезно в контексте данных дерева, если у вас нет иерархии стран (в случае руководства), а не что-то вроде стран-> городов-> ориентиров.

Может ли кто-нибудь сказать мне, если это предполагаемое поведение?

Следует также упомянуть, что я использую 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

Смежные вопросы