Уникальные порядковые номера при использовании очереди (1 рабочий)

Я пытаюсь создать уникальные, последовательные номера счетов. Счета-фактуры генерируются с использованием очереди с 1 работником, но из 160 счетов-фактур 28 по-прежнему имеют повторяющиеся номера. Ниже приведен код, используемый для создания уникального номера счета.

public static function getNewInvoiceNumber(String $prefix)
{
    $lastNumber = App\Invoice::where('invoiceNumber', 'LIKE', $prefix . now()->year . '-%')->orderByDesc('invoiceID')->first()->invoiceNumber ?? '0';
    $newNumber = (int)substr($lastNumber, strlen($prefix . now()->year . '-')) + 1;

    while (App\Invoice::where('invoiceNumber', $prefix . now()->year . '-' . $newNumber)->exists()) {
        $newNumber++;
    }

    return $newNumber;
}

Вы пытались задать УНИКАЛЬНОЕ ограничение для поля invoiceNumber? Вам нужно только поймать ожидание и, в конце концов, повторить попытку.

dparoli 01.03.2019 14:51

Это то, что я делаю сейчас, но я бы предпочел не полагаться на перехват исключений и просто пытаться снова.

SupFrost 01.03.2019 15:41

Я не уверен, решит ли это проблему, но я использую ->value(DB::raw("MAX(invoiceNumber COLLATE utf8_unicode_ci)")) вместо ->orderByDesc('invoiceID')->first()->invoiceNumber и работает на меня

Murat Tutumlu 01.03.2019 16:41

Я думаю, что проблема в заказе по invoiceID, а не по номеру счета

Murat Tutumlu 01.03.2019 17:28

Если это не проблема визуальной гармонизации, то вы можете добавить к нему результат time() в PHP, который представляет собой уникальные временные метки в течение 1 секунды. И если вы соедините это с некоторым кодом продукта - поставщика, он должен быть уникальным, даже если 2 счета-фактуры создаются в одну и ту же секунду.

KeitelDOG 01.03.2019 17:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
5
54
0

Другие вопросы по теме