Guest User

Untitled

a guest
May 22nd, 2015
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.60 KB | None | 0 0
  1.     public function move($parentId, $leftSibling = null)
  2.     {
  3.         $parent = self::find($parentId);
  4.  
  5.         if ($this->parentNode()->id == $parent->id)
  6.         {
  7.             throw Exception('Temporary unavailable');
  8.  
  9.             if ($parent->hasChild())
  10.             {
  11.                 if ($leftSibling === null)
  12.                 {
  13.                     throw Exception('Sibling not found');
  14.                 }
  15.  
  16.                 $rightKeyNear = $leftSibling->right_key;
  17.             }
  18.             else
  19.             {
  20.                 $rightKeyNear = $parent->left_key;
  21.                 dd('par left');
  22.             }
  23.         }
  24.         else
  25.         {
  26.             if ($parent->level == 0)
  27.             {
  28.                 //перемещение в корень
  29.                 $rightKeyNear = self::max('right_key')->get();
  30.             }
  31.             else
  32.             {
  33.                 $rightKeyNear = $parent->right_key - 1;
  34.             }
  35.         }
  36.  
  37.         $levelSkew = $parent->level - $this->level + 1;
  38.         $keySkew = $this->right_key - $this->left_key + 1;
  39.  
  40.         $childIds = self::where('left_key', '>=', $this->left_key)->where('right_key', '<=', $this->right_key)->lists('id');
  41.  
  42.         if ($rightKeyNear > $this->right_key)
  43.         {
  44.             echo 'up';
  45.             $editSkew = $rightKeyNear - $this->left_key + 1;
  46.  
  47.             // UPDATE my_tree SET right_key = right_key + $skew_tree WHERE right_key < $left_key AND right_key > $right_key_near
  48.             self::where('right_key', '<', $this->left_key)->where('right_key', '>', $rightKeyNear)->update(array('right_key' => DB::raw('`right_key` + (' . $keySkew . ')')));
  49.    
  50.             // UPDATE my_tree SET left_key = left_key + $skew_tree WHERE left_key < $left_key AND left_key > $right_key_near
  51.             self::where('left_key', '<', $this->left_key)->where('left_key', '>', $rightKeyNear)->update(array('left_key' => DB::raw('`left_key` - (' . $keySkew . ')')));
  52.            
  53.         }
  54.         else
  55.         {
  56.             echo 'down';
  57.             $editSkew = $rightKeyNear - $this->left_key - $keySkew + 1;
  58.  
  59.             // UPDATE my_tree SET right_key = right_key - $skew_tree WHERE right_key > $right_key AND right_key <= $right_key_near
  60.             self::where('right_key', '>', $this->right_key)->where('right_key', '<=', $rightKeyNear)->update(array('right_key' => DB::raw('`right_key` - (' . $keySkew . ')')));
  61.        
  62.             // UPDATE my_tree SET left_key = left_key - $skew_tree WHERE left_key < $left_key AND left_key > $right_key_near
  63.             self::where('left_key', '<', $this->left_key)->where('left_key', '>', $rightKeyNear)->update(array('left_key' => DB::raw('`left_key` - (' . $keySkew . ')')));
  64.         }
  65.  
  66.         // 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)
  67.         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 . ')')));
  68.     }
Advertisement
Add Comment
Please, Sign In to add comment