code: protected function mapTreeRecursive(array $tree, $parentKey = null, &$affectedKeys = array()) {
      // For every attribute entry: We'll need to instantiate a new node either
      // from the database (if the primary key was supplied) or a new instance. Then,
      // append all the remaining data attributes (including the `parent_id` if
      // present) and save it. Finally, tail-recurse performing the same
      // operations for any child node present. Setting the `parent_id` property at
      // each level will take care of the nesting work for us.
      foreach($tree as $attributes) {
        $node = $this->firstOrNew($this->getSearchAttributes($attributes));
  
        $data = $this->getDataAttributes($attributes);
        if ( !is_null($parentKey) )
          $data[$node->getParentColumnName()] = $parentKey;
  
        $node->fill($data);
  
        $result = $node->save();
  
        if ( ! $result ) return false;
  
        $affectedKeys[] = $node->getKey();
  
        if ( array_key_exists($this->getChildrenKeyName(), $attributes) ) {
          $children = $attributes[$this->getChildrenKeyName()];
  
          if ( count($children) > 0 ) {
            $result = $this->mapTreeRecursive($children, $node->getKey(), $affectedKeys);
  
            if ( ! $result ) return false;
          }
        }
      }
  
      return true;
    }
docs: Maps a tree structure into the database
  
  @param   array   $tree
  @param   mixed   $parent
  @return  boolean