Увеличение уникального номера СЧЕТА по последней дате добавления номера в Laravel PHP / MYSQL - PullRequest
0 голосов
/ 15 марта 2020

Мне нужно сгенерировать уникальный инкрементный номер счета (строка) по последней дате добавленного номера. Номер счета не имеет формата по умолчанию, пользователь может зарегистрировать любую строку по своему усмотрению. Примеры: 00001, ab c, EP-2018 / 00005..et c.

Хорошо, как нужно работать? Если пользователь регистрирует строку 0001 в качестве номера счета, то на странице «Добавить новый счет» необходимо отобразить следующий инкрементный номер, в этом случае будет 0002. Если пользователь зарегистрирует счет со строкой ab c в качестве номера счета, то на странице «Добавить новый счет», необходимо отобразить абд. Итак, как вы видите, это зависит от последней даты добавленного номера, поскольку вторая строка была ab c, теперь мы видим на странице «Добавить новый счет» abd следующий уникальный номер.

Другой пример, и здесь работа становится очень сложной: если в db у нас уже есть счет с номером «abd», а он очень старый, то нам нужно получить следующий инкремент, а это «abe».

Таблица базы данных " счета " :

  • идентификатор (автоинкремент)
  • число (строка)
  • updated_at (отметка времени)

Пример 1:

id | number | updated_at
------------------------
1   abc     2020-03-14 11:50:09
2   abd     2020-03-14 11:39:03

Итак, последнее обновленное / добавленное число - «ab c», следующее число должно быть «abe»

Пример 2:

id | number | updated_at
------------------------
1   abe     2020-03-14 11:49:09
2   abc     2020-03-14 11:50:09
3   abd     2020-03-14 11:49:09
4   00001   2020-03-15 10:45:52
5   abf     2020-03-15 10:42:50

Итак, последний обновленный / добавленный номер - "00001", следующий номер должен быть "00002"

Я пробовал это:

    $latestByUpdatedDate = Invoice::latest('updated_at')->first();

    $latestByNumber = Invoice::latest('number')->first();


    if($latestByUpdatedDate > $latestByNumber){
        return ++$latestByUpdatedDate->number;
    }

    return ++$latestByNumber->number;

Все работает хорошо, если $ latestByUpdatedDate и $ latestByNumber содержат только символы или только цифры c, если попытаться сравнить 00001 с ab c, результат будет равен неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...