Я вставляю отношение с помощью следующего кода:
db.Where(exercise).FirstOrCreate(&exercise).Model(&User{ID: userID}).Association("Exercises").Append(&exercise)
Соответствующий SQL, напечатанный консолью отладки, к коду:
INSERT INTO `user_exercise` (`user_id`,`exercise_id`) SELECT 1,1 FROM DUAL WHERE NOT EXISTS (SELECT * FROM `user_exercise` WHERE `user_id` = 1 AND `exercise_id` = 1)
Я хочу знать, есть ли новые записи, созданные в user_exercise
, но из-за сгенерированного SQL, если отношение в user_exercise
уже существует, оно не будет вставлено и не выдаст ошибку.
Объект Go-Gorm Association
не имеет атрибута RowsAffected
, поэтому я не могу получить RowsAffected
из запроса, чтобы подтвердить, создана ли новая запись.
Хотя я могу получить RowsAffected
от первого db
объекта, например
db.Where(exercise).FirstOrCreate(&exercise).Model(&User{ID: userID}).Association("Exercises").Append(&exercise)
if db.RowsAffected == 1 {
// do something
}
Интересно, поскольку БД совместно используется всеми запросами, если другой запрос выполняется одновременно и затрагивает строки> 0, безопасно ли получать RowsAffected
из глобального db
объекта?