はじめに
Gormを使用してデータベースを操作していましたが、レコードを削除した際にアプリ上で見ると消えているもののデータベース上には残っていることに気が付きました。
筆者の場合は、ユーザーのメールアドレスを一意な値にしたことで、「新規登録」→「ユーザー削除」→「同じアドレスで再登録」した際にデータベースでエラーが起きていました。
対処法
対処前に書いていたユーザー削除のコードは以下になります。
func DbDeleteUser(id int) {
d := db.GormConnect()
d.Delete(&User{}, id)
defer d.Close()
}
この書き方だと、論理削除といってレコードがデータベースから物理的に削除されるわけではなく、通常のクエリ系のメソッドで検索できなくなるだけのようです。
対処後のコードは以下になります。
func DbDeleteUser(id int) {
d := db.GormConnect()
d.Unscoped().Delete(&User{}, id) //ここを変更
defer d.Close()
}
Unscoped()
を追加することでレコードをデータベースから物理的に削除することができます。