我有下表:
现在,我想做的是,也许有人想加入另一个“班级”,那么人数会根据班级而变化。这些类如下所示:
其中xx
代表团队编号。
所以让我们看一个例子。
团队202,想要更改为Toerisme
,在Toerisme
中,我们有数字301、304、305和306。因此,系统必须知道是否有人将其类更改为3xx,或者在该课程中注册为新用户,他/她必须获得第一个数字(即302)。然后,第二个数字是303,但是第三个数字是307。
所以我必须要有一种方法来检查那些数字中的空闲点。
我当前用于分配数字的代码如下:
public function getTeamNumber($klasse_start_number)
{
if(self::whereRaw('LEFT(number, 1) = '.$klasse_start_number)->count() <= 0)
{
switch ($klasse_start_number) {
case '1':
return '101';
break;
case '2':
return '201';
break;
case '3':
return '301';
break;
case '4':
return '401';
break;
}
}
$latest_number = self::whereRaw('LEFT(number, 1) = '.$klasse_start_number)->orderBy('number', 'DESC')->latest()->first()->number;
$number = $latest_number + 1;
return $number;
}
我如何检查那些空位并将它们分配给正确的团队?
答案 0 :(得分:0)
在您的情况下,类似这样的方法将起作用。关于您的方法的几点说明。
您使用的方法名称有点模糊,我共享的方法名称可能有点过大,但是尝试并变得更清晰总是一个好主意。
public static function getNextOpenTeamNumberFromStartNumber($klasse_start_number) {
// first get all of the numbers ordered by the number
$team_numbers = self::whereRaw('LEFT(number, 1) = ?', [$klasse_start_number])->orderBy('number', 'ASC')->get();
// the expected first number
$expected_next_number = ($klasse_start_number * 100) + 1;
if(!empty($team_numbers)) {
// loop through each of the numbers
foreach($team_numbers as $team_number) {
if($team_number->number != $expected_next_number) {
return $expected_next_number; // if the team number isn't the expected number that means that the expected number is open
}
$expected_next_number++;
}
}
// if we went through all the numbers and haven't returned yet the expected next number would be open
return $expected_next_number;
}