Использую две схожие модели и у них не должно быть одинакового значения в поле 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 и оттуда доставать?