/** * Set level for descendents. * * @param Model $Model Model using this behavior. * @param int|string $id Record ID * @return void */ protected function _setChildrenLevel(Model $Model, $id) { $settings = $Model->Behaviors->Tree->settings[$Model->alias]; $primaryKey = $Model->primaryKey; $depths = array($id => (int) $Model->data[$Model->alias][$settings['level']]); $children = $Model->children($id, false, array($primaryKey, $settings['parent'], $settings['level']), $settings['left'], null, 1, -1); foreach ($children as $node) { $parentIdValue = $node[$Model->alias][$settings['parent']]; $depth = (int) $depths[$parentIdValue] + 1; $depths[$node[$Model->alias][$primaryKey]] = $depth; $Model->updateAll(array($Model->escapeField($settings['level']) => $depth), array($Model->escapeField($primaryKey) => $node[$Model->alias][$primaryKey])); } }