setParent($uid, $to_uid); $this->add($uid, $to_uid, 1); return true; } public function setParent($uid, $to_uid, $level = 1) { $parent = $this->getParent($uid); if ($parent) { $level = $level + 1; if ($level > $this->total) { return; } $this->add($parent['uid'], $to_uid, $level); $this->setParent($parent['uid'], $to_uid, $level); } } # 更换上级 效率较高 public function replaceParent($uid, $old_parent, $new_parent) { $info = Dever::db('invite/relation')->one(array('to_uid' => $uid, 'uid' => $old_parent)); if ($info) { $state = Dever::db('invite/relation')->update(array('where_id' => $info['id'], 'uid' => $new_parent)); if ($state) { $child = $this->getChild($uid, 1); if ($child) { foreach ($child as $k => $v) { $this->replaceParent($v['to_uid'], $old_parent, $new_parent); } } } } return true; } # 重置上级 效率较低 public function resetParent($uid, $parent) { Dever::db('invite/relation')->delete(array('to_uid' => $uid)); $this->set($parent, $uid); $child = $this->getChild($uid, 1); if ($child) { foreach ($child as $k => $v) { $this->resetParent($v['to_uid'], $uid); /* $child_parent = $this->getParentAll($v['to_uid']); if ($child_parent) { foreach ($child_parent as $k1 => $v1) { if ($v1['level'] > $v['level']) { Dever::db('invite/relation')->update(array('where_id' => $v['id'], 'uid' => $parent)); } } }*/ } } return true; } # 清理邀请关系 public function dropParent($uid, $parent) { return Dever::db('invite/relation')->delete(array('to_uid' => $uid, 'uid' => $parent)); } # 获取某个用户的上级数据 public function getParent($uid, $level = 1) { return Dever::db('invite/relation')->one(array('to_uid' => $uid, 'level' => $level)); } # 获取某个用户的所有上级数据 public function getParentAll($uid, $level = false, $order = 1) { $where['to_uid'] = $uid; if ($level) { $where['level'] = $level; } if ($order == 1) { return Dever::db('invite/relation')->getParent($where); } else { return Dever::db('invite/relation')->getParentLevel($where); } } # 获取某个用户的下级数据 public function getChild($uid, $level = false, $page = true) { $where['uid'] = $uid; if ($level) { $where['level'] = $level; } if ($page) { return Dever::db('invite/relation')->getChildByPage($where); } else { return Dever::db('invite/relation')->getChild($where); } } # 获取某个用户在x小时之内的下级数据 public function getChildNum($uid, $level = 1, $time = false, $curtime = false, $method = 'count') { $where['uid'] = $uid; if ($level) { $where['level'] = $level; } if ($time) { $time = $time * 3600; if ($curtime) { if (strstr($curtime, '-')) { $curtime = maketime($curtime); } $cur = $curtime; } else { $cur = time(); } $where['end'] = $cur + $time; } if ($method == 'count') { $method = 'getChildCount'; } else { $method = 'getChild'; } return Dever::db('invite/relation')->$method($where); } # 插入数据 public function add($uid, $to_uid, $level = 1) { $data['uid'] = $uid; $data['to_uid'] = $to_uid; $data['level'] = $level; $data['clear'] = true; $info = Dever::db('invite/relation')->one($data); if (!$info) { return Dever::db('invite/relation')->insert($data); } return false; } }