/**
* 递归获取所有上级UID(避免闭环,建议根据业务逻辑做层级限制)
* @param int $uid 当前用户UID
* @param int $maxLevel 最大查询层级(防止无限循环)
* @return string 逗号分隔的上级UID,如 "1001,1002,1003"
*/
public function getParentUids($uid, $maxLevel = 10)
{
$parentUids = [];
$currentUid = $uid;
// 循环查询上级
for ($i = 0; $i < $maxLevel; $i++) {
$parent = User::where('uid', $currentUid)
->field('tguid')
->find();
// 没有上级或上级为0时终止
if (!$parent || empty($parent['tguid'])) {
break;
}
// 防止闭环:如果上级已在链中则终止
if (in_array($parent['tguid'], $parentUids)) {
break;
}
// 记录上级UID并继续向上查找
$parentUids[] = $parent['tguid'];
$currentUid = $parent['tguid'];
}
return implode(',', $parentUids);
}