PHP вставляет данные в пустые места - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть следующая таблица:

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 голосов
/ 04 февраля 2019

В вашей ситуации что-то подобное будет работать.Несколько замечаний о вашем методе.

  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;
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...