1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Gormで全レコード削除をしたが削除されなかった

Last updated at Posted at 2022-09-05

はじめに

いままで全レコード削除できていると思っていたコードが機能していなかったことで時間を取られましたのでまとめます
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を使っていきます

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?