2015-05-06 1 views
3

Я настраиваю API и предпочитаю просто иметь объекты в моем массиве вместо «Имя модели» & «Дети» неоднократно посыпались повсюду. Есть ли способ сделать это? Я предполагаю, что петля будет делать трюк, но я не могу понять это.Cakephp найти threaded без «Children»

 $results = $this->Test->find('threaded', array(
    'fields' => array('id', 'parent_id', 'name'), 
     'order' => array('lft ASC') // or array('id ASC') 
    )); 

    for ($i = 0; $i <= $this->Test->childCount(1); $i++) { 
    debug($results[$i]['children']); 

    } 

    $this->set(array(
    'results' => $results, 
    '_serialize' => 'results' 
    )); 
+0

Какая версия торта? Не могли бы вы показать пример поискового запроса, который вы используете, и как вы хотите, чтобы результаты выглядели. – drmonkeyninja

+0

обновил мой вопрос. –

+0

Не могли бы вы привести пример того, как вы хотите, чтобы ваш массив результатов выглядел? Вы просто хотите плоский массив с детьми на той же глубине, что и родители? – drmonkeyninja

ответ

1

Кажется, что код, который вы предоставили, не является уникальным для обоих 3.x и 2.x, поэтому я поделюсь решениями для каждого.

3.x

Вы можете получить плоский список всех потомков узла дерева, передавая «детей» как тип искателя в вашем запросе:

$result = $this->Test->find('children', array(
    'for' => $record_id, // Notice you have to specify 'for' key! 
    'fields' => array('id', 'parent_id', 'name'), 
    'order' => array('lft ASC') 
)); 

Если у вас чтобы найти только прямые дети вашего узла, проходят в верно и для «прямой» ключ в массиве параметров:

$result = $this->Test->find('children', array(
    'for' => $record_id, // Notice you have to specify 'for' key! 
    'fields' => array('id', 'parent_id', 'name'), 
    'order' => array('lft ASC'), 
    'direct' => true 
)); 

Дополнительная информация:

3.x Cookbook for TreeBehavior

3.x findChildren() defined in API

3.x API Info for findChildren()

2.x

Чтобы получить плоский список всех потомков в 2.x, вы использовать -> дети (функции) предоставленный классом TreeBehavior:

$result = $this->Test->children(
    $record_id,     // ID of record to find children for 
    false,      // Direct = false 
    ['id', 'parent_id', 'name'], // Fields to include in query 
    'lft ASC'      // Order 
) 

С другой стороны, найти прямых потомков только, вы бы пройти во второй аргумент как истинный:

$result = $this->Test->children(
    $record_id,     // ID of record to find children for 
    true,       // Direct = true 
    ['id', 'parent_id', 'name'], // Fields to include in query 
    'lft ASC'      // Order 
) 

Дополнительная информация:

2.x Cookbook for TreeBehavior

2.x children() defined in API

2.x API Info for children()

T он CakePHP TreeBehavior делает большую работу по абстрагированию от множества проблем с работой с данными Tree. Я надеюсь, что эта информация поможет!

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