Удалить не работает

0

Почему я не могу удалить запись из базы данных mysql с помощью .Delete()?

Вот пример:

tx := db.Begin()
if err := tx.Delete(&User{}, id).Error; err != nil {
  fmt.Print(err)
  tx.Rollback()
} else {
  fmt.Print("Rows affected: %d", tx.RowsAffected) // Always returns 0
  tx.Commit()
}

Использование tx.First(&user, id) работает и возвращает пользователя правильно

Я старался:
tx.Unscoped().Delete(...) также не работает
tx.Exec("delete from users where (id =?)", id) RowsAffected = 0
tx.First(&user, id); tx.Delete(&user) tx.First(&user, id); tx.Delete(&user) не работает

ps Пользователь с идентификатором id существует в базе данных

  • 0
    Что делать, если вы фиксируете перед печатью затронутые строки?
  • 0
    @koshvery на самом деле я написал этот код на этом сайте. В моем проекте коммит перед печатью. Я пытался изменить, и ничего не изменилось
Показать ещё 4 комментария
Теги:
go
go-gorm

2 ответа

1

Когда я обновляюсь до версии v.1.9.x, DELETE() не работает. И я откатился к версии 1.0, он работал правильно.

После включения DB Log я нашел новую функцию gorm v1.9: Auto Create/Update

Ссылка находится здесь: http://gorm.io/docs/associations.html#Auto-Create-Update

Поэтому, если вы обновите поле после удаления чего-либо, он вернет данные обратно в базу данных.

попробуйте пропустить Auto Create/Update, как это.

db.Set("gorm:association_autoupdate", false).Set("gorm:association_autocreate", false).Create(&user)
0

//Сначала найдите запись и эту структуру, которая будет использоваться для удаления пользователя:

 tx := db.Begin()

  // Read
  var user User
  tx.First(&user, id) // find product with id 1

  // Delete - delete user
  //tx.Delete(&user)

if err := tx.Delete(&user).Error; err != nil {
  fmt.Print(err)
  tx.Rollback()
} else {
  fmt.Print("Rows affected: %d", tx.RowsAffected) // Always returns 0
  tx.Commit()
}
  • 0
    этот подход в моем блоке неудачных попыток (не работает)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню