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 и оттуда доставать?
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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