レコードの削除
レコードを削除する場合、何らかの条件が必要であり、そうでない場合はエラーErrMissingWhereClause
が発生します。例えば
e := query.Email |
主キーによる削除
GEN では、インライン条件で主キーを使用してオブジェクトを削除できます。これは数値で機能します。
u.WithContext(ctx).Where(u.ID.In(1,2,3)).Delete() |
バッチ削除
指定された値に主キーがない場合、GEN はバッチ削除を実行し、一致するすべてのレコードを削除します。
e := query.Email |
ソフトデリート
モデルに gorm.DeletedAt
フィールド(gorm.Model
に含まれている)が含まれている場合、自動的にソフトデリート機能が有効になります!
Delete
を呼び出すと、レコードはデータベースから削除されませんが、GORM は DeletedAt
の値を現在の時刻に設定し、通常の Query メソッドではそのデータを見つけることができなくなります。
// Batch Delete |
gorm.Model
を含めたくない場合は、次のようにソフトデリート機能を有効にできます。
type User struct { |
ソフトデリートされたレコードの検索
Unscoped
を使用してソフトデリートされたレコードを見つけることができます。
users, err := db.WithContext(ctx).Unscoped().Where(u.Age.Eq(20)).Find() |
完全削除
Unscoped
を使用して、一致するレコードを完全に削除できます。
o.WithContext(ctx).Unscoped().Where(o.ID.Eq(10)).Delete() |
関連付けの削除
ソースと引数の間の関係が存在する場合は削除します。参照のみを削除し、DB からオブジェクトを削除することはありません。
u := query.User |
Select による削除
レコードを削除するときに、Select
を使用して選択された has one/has many/many2many の関連を削除できます。例:
u := query.User |