我很难找到解决办法。如果有人能帮助我,那将是一个很大的帮助。假设我有一个这样的用户表:
<表类>
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;
}