/** * After mode was saved we're building node path * * @param Tree $model */ public function saved(Tree $model) { if ($model->{$model->getTreeColumn('path')} === '') { // If we just save() new node $model->{$model->getTreeColumn('path')} = $model->getKey() . '/'; DB::table($model->getTable())->where($model->getKeyName(), '=', $model->getKey())->update(array($model->getTreeColumn('path') => $model->{$model->getTreeColumn('path')})); } }
/** * Updating descendants nodes * * @param Tree $node Updated node * @param Collection $oldDescendants Old descendants collection (just before modify parent) */ protected function updateDescendants(Tree $node, $oldDescendants) { $refs = []; $refs[$node->getKey()] =& $node; // Updated node foreach ($oldDescendants as &$child) { $refs[$child->getKey()] = $child; $parent_id = $child->{$this->getTreeColumn('parent')}; if (!empty($refs[$parent_id])) { if ($refs[$parent_id]->path != $refs[$child->getKey()]->removeLastNodeFromPath()) { $refs[$child->getKey()]->level = $refs[$parent_id]->level + 1; // New level $refs[$child->getKey()]->path = $refs[$parent_id]->path . $child->getKey() . '/'; // New path DB::table($this->getTable())->where($child->getKeyName(), '=', $child->getKey())->update([$this->getTreeColumn('level') => $refs[$child->getKey()]->level, $this->getTreeColumn('path') => $refs[$child->getKey()]->path]); } } } $this->fireModelEvent('updatedDescendants', false); }