Просто напоминание: метод reorder()
из поведения дерева изменяет только поля left и right дерева, следуя логике MPTT (что тип дерева, используемого этим поведением). Это не заставляет все find()
в этой модели волшебным образом доставлять порядок, определенный вашим reorder()
методом. Вам все еще нужно передать параметр order
в параметрах find()
, чтобы фактически использовать обновленные левое и правое значения.
Предположим, вы используете имена столбцов по умолчанию, используемые TreeBehavior: lft
для поля left и rght
для поля right . После запуска метода reorder()
, указанного в вопросе, для передачи упорядоченных данных из вашей Модели в View, вы должны использовать что-то вроде:
$this->Category->find('all', array(
'order' => array(
'Category.lft' => 'ASC'
)
));
Конечно, заменив тип find
, если вы хотите использовать что-то другое, чем 'all'
.
Упорядочение по Category.lft
фактически покажет вам порядок, который вы получите, выполнив поиск в глубину слева направо, а не произвольный порядок, определенный базой данных, как если бы у вас не было параметра order
, или если вы использовали простой 'order' => 'Category.name'
в параметрах find
, который игнорировал бы древовидную структуру.
П.С .: Я знаю, что этому вопросу 2 года, но поскольку никто не объяснил, что на самом деле делает reorder()
, я думаю, что это было бы полезно.