PHP在空白处插入数据

时间:2019-02-04 16:44:23

标签: php laravel-5 eloquent

我有下表:

Table

现在,我想做的是,也许有人想加入另一个“班级”,那么人数会根据班级而变化。这些类如下所示:

  • 1xx =>初始化
  • 2xx =>创造力
  • 3xx => Toerisme
  • 4xx =>体育

其中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;
}

我如何检查那些空位并将它们分配给正确的团队?

1 个答案:

答案 0 :(得分:0)

在您的情况下,类似这样的方法将起作用。关于您的方法的几点说明。

  1. 考虑将其实现为静态方法,因为它不依赖于模型类的当前实例。
  2. 您应该尝试使用参数化查询,而不是为SQL查询连接参数。尽量尝试防止SQL注入始终是一个好习惯。
  3. 您使用的方法名称有点模糊,我共享的方法名称可能有点过大,但是尝试并变得更清晰总是一个好主意。

    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;
    }