はじめに
いままで全レコード削除できていると思っていたコードが機能していなかったことで時間を取られましたのでまとめます
GORMを使い始めたばかりのときにつまづく箇所になりそうです
問題
以下のようなコードでユーザーデータの削除を行っていました
user.go
db.Delete(&User{})
これですべてのユーザーが削除できていたと思っていたのですが、テストをした際にユーザーのメールアドレスのユニークバリデーションで引っかかってしまい、他のテストデータが削除できていないことが判明しました
解決方法
user.go
db.Unscoped().Where("1=1").Delete(&User{})
として削除ができるようになりました
ポイントは2つで、全レコードを削除するにはWhere
を使わないと削除ができないということ、Unscoped
で物理削除を行うことでした
ここではWhere(1=1)で無理やりWhereを利用して全レコード削除をしています
とくにWhere
は知らないとつまづくポイントなので公式を確認するとよいかと思います
おわりに
Whereを使わないといけないというのを知っていれば早く解決できるところでしたが、なんとなくでGORMを使ってエラーが特に出ていなかったので気づかずにここまで来ていました
今後はしっかりWhereを使っていきます
参考