Задать вопрос
besogonskiy
@besogonskiy
работаю php laravel разработчиком.

Как успеть получить max id и добавить элемент с id+1 пока не заняли?

Использую две схожие модели и у них не должно быть одинакового значения в поле id. То есть, должна соблюдаться уникальность внутри двух моделей. Решил эту задачу при помощи функции:

static function getNextId() {
        $mpMaxId = MasterProduct::max('id');
        $gpMaxId = GroupedProduct::max('id');
        if ( $mpMaxId > $gpMaxId ) {
            return $mpMaxId+1;
        } else {
            return $gpMaxId+1;
        }
    }

И в большинстве случаев это работает. Функция всегда возвращает максимальный из двух таблиц ID+1 и перед тем как записать новую модель этот идентификатор заполняется. НО вот случается такое, что при попытке сохранить происходит ругание на неуникальность ключа. В чем может быть дело?

Может как-то в транзакции бронировать этот id? Или может несколько пользователей одновременно создавали элементы (товары) и пока мы получали id для одного, другой уже захватил этот id?

Как нам быть? в redis закидывать этот id и оттуда доставать?
  • Вопрос задан
  • 111 просмотров
Подписаться 1 Простой 6 комментариев
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы