Это очень похоже на проблему параллелизма. Код делает две вещи:
- получить все ассоциации между пользователем и продавцом
- если нет ассоциации, создайте
Проблема возникает при выполнении нескольких одновременных вызовов на addSalesmanUser
. В этом случае первый шаг может получить пустой список для нескольких одновременных вызовов, потому что в момент его выполнения никакие другие записи не вставляются. Таким образом, второй шаг будет вставлять несколько записей.
Вы писали, что это не проблема, но, пожалуйста, посмотрите на столбец времени создания, разница составляет 4 мс, что говорит о том, что это было одновременное выполнение.
Самый простой способ справиться с этим - применить ограничение, согласно которому для данного пользователя в базе данных должен быть только один продавец. Создайте уникальное ограничение для пары (user_id, salesman_id)
. С его помощью только один вызов будет успешным.