При чем здесь транзакция? Вы обратили внимание, что команда InventDim::find() выполняется БЕЗ второго параметра. Т.е. идет режим "грязного чтения" и факт наличия или отсутствия транзакции вообще никак не влияет. Да даже если и нет "грязного чтения". Все равно результат будет тот же самый.
Два пользователя "одновременно" начали создание одной и той же складской аналитики. Первый пользователь создал новую запись. А что должно произойти со вторым? Вполне логично, что его должно выбросить с сообщением об ошибке.
И какая разница, будет выполняться поиск в одной транзакции или в другой? Результат будет одинаковый - прерывание обработки. И ничем, никоим образом, здесь не поможет факт поиска в другой транзакции.
Теоретически, здесь могло бы помочь "зацикливание". Т.е. если произошла ошибка InventDim::FindOrCreate(), то делаем повторную попытку его выполнения. Но, здесь будут свои особенности.
Еще раз повторюсь. UserConnection - не поможет. Вам просто повезло. Стечение обстоятельств. Видимо, из-за дополнительной задержки, потребовавшейся на создание соединения поиск у второго "пользователя" произошел тогда, когда первый "пользователь" уже создал запись.
|