轮循分配用户



我很难找到解决办法。如果有人能帮助我,那将是一个很大的帮助。假设我有一个这样的用户表:

<表类> id 名称 tbody> <<tr> 1 约翰 2 布莱恩 3 艾迪4 米娅

我可能会通过获取该特定组最近一次会议的用户ID来实现这一点:

private function getLatestUserId(int $groupid): ?int
{
    return Meeting::where('groupid', $groupid)
        ->latest('meetingid')
        ->first()
        ?->user_id;
}

然后使用该用户ID,我将找出该组中的下一个用户是谁:

private function getNextUserId(int $groupid, int $latestUserId): ?int
{
    return DB::table('group_user')
        ->where('groupid', $groupid)
        ->where('user_id', ">", $latestUserId)
        ->orderBy('user_id')
        ->first()
        ?->user_id;
}

如果这是第一次会议,或者所有的用户都已经轮到他们了,我会从该组中的第一个用户开始:

private function getFirstUserId($groupid): ?int
{
    return DB::table('group_user')
        ->where('groupid', $groupid)
        ->orderBy('user_id')
        ->first()
        ?->user_id;
}
至于在哪里会发生这种情况,我将在控制器中注入一个服务类。这个服务类将负责处理创建和更新会议的逻辑。

编辑:

所有这些放在一起会是什么样子:

public function getMeetingUserId(int $groupid): ?int
{
    $latestUserId = $this->getLatestUserId($groupid);
    if ($latestUserId === null) {
        // First time the meeting is being held
        return $this->getFirstUserId($groupid);
    }
    $nextUserId = $this->getNextUserId($groupid, $latestUserId);
    if ($nextUserId === null) {
        // All users have had their turn, starting over
        return $this->getFirstUserId($groupid);
    }
    return $nextUserId;
}

编辑2:

我建议在第一次编辑时像上面的例子那样做,但是…

$mod = null;
$latestUserId=Meeting::where('groupID', $req->groupID)
    ->latest('meetingid')
    ->first()
    ?->user_id;
$firstUserId=DB::table('group_user')
    ->where('group_id', $req->groupID)
    ->orderBy('user_id')
    ->first()
    ?->user_id;
if ($latestUserId) {
    $nextUserId=DB::table('group_user')
        ->where('group_id', $req->groupID)
        ->where('user_id', ">", $latestUserId)
        ->orderBy('user_id')
        ->first()
        ?->user_id;
    $mod = $nextUserId;
} else {
    $mod = $firstUserId;
}

相关内容

  • 没有找到相关文章

最新更新