golangのORマッパーであるgormにおいて、論理削除されたレコードを取得するにはUnscoped()を用いる。
Preloadで読み込むテーブルに対してもUnscoped()を適用する方法を記載する。
メインテーブルの論理削除SELECT
db.Where("id = ?", id).Find(&table1)
Preloadするテーブルの論理削除SELECT
db.Preload("Table2", func(db *gorm.DB) *gorm.DB { return db.Unscoped() })..Where("id = ?", id).Find(&table1)
以下のようにすることでPreload先の論理削除レコードをSELECTできる。
.Preload("Table2", func(db *gorm.DB) *gorm.DB {
return db.Unscoped()
})
以上。