Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public function move($parentId, $leftSibling = null)
- {
- $parent = self::find($parentId);
- if ($this->parentNode()->id == $parent->id)
- {
- throw Exception('Temporary unavailable');
- if ($parent->hasChild())
- {
- if ($leftSibling === null)
- {
- throw Exception('Sibling not found');
- }
- $rightKeyNear = $leftSibling->right_key;
- }
- else
- {
- $rightKeyNear = $parent->left_key;
- dd('par left');
- }
- }
- else
- {
- if ($parent->level == 0)
- {
- //перемещение в корень
- $rightKeyNear = self::max('right_key')->get();
- }
- else
- {
- $rightKeyNear = $parent->right_key - 1;
- }
- }
- $levelSkew = $parent->level - $this->level + 1;
- $keySkew = $this->right_key - $this->left_key + 1;
- $childIds = self::where('left_key', '>=', $this->left_key)->where('right_key', '<=', $this->right_key)->lists('id');
- if ($rightKeyNear > $this->right_key)
- {
- echo 'up';
- $editSkew = $rightKeyNear - $this->left_key + 1;
- // UPDATE my_tree SET right_key = right_key + $skew_tree WHERE right_key < $left_key AND right_key > $right_key_near
- self::where('right_key', '<', $this->left_key)->where('right_key', '>', $rightKeyNear)->update(array('right_key' => DB::raw('`right_key` + (' . $keySkew . ')')));
- // UPDATE my_tree SET left_key = left_key + $skew_tree WHERE left_key < $left_key AND left_key > $right_key_near
- self::where('left_key', '<', $this->left_key)->where('left_key', '>', $rightKeyNear)->update(array('left_key' => DB::raw('`left_key` - (' . $keySkew . ')')));
- }
- else
- {
- echo 'down';
- $editSkew = $rightKeyNear - $this->left_key - $keySkew + 1;
- // UPDATE my_tree SET right_key = right_key - $skew_tree WHERE right_key > $right_key AND right_key <= $right_key_near
- self::where('right_key', '>', $this->right_key)->where('right_key', '<=', $rightKeyNear)->update(array('right_key' => DB::raw('`right_key` - (' . $keySkew . ')')));
- // UPDATE my_tree SET left_key = left_key - $skew_tree WHERE left_key < $left_key AND left_key > $right_key_near
- self::where('left_key', '<', $this->left_key)->where('left_key', '>', $rightKeyNear)->update(array('left_key' => DB::raw('`left_key` - (' . $keySkew . ')')));
- }
- // UPDATE my_tree SET left_key = left_key + $skew_edit, right_key = right_key + $skew_edit, level = level + $skew_level WHERE id IN ($id_edit)
- self::whereIn('id', $childIds)->update(array('left_key' => DB::raw('`left_key` + (' . $editSkew . ')'), 'right_key' => DB::raw('`right_key` + (' . $editSkew . ')'), 'level' => DB::raw('`level` + (' . $levelSkew . ')')));
- }
Advertisement
Add Comment
Please, Sign In to add comment