插入后无法检索任何关系表

Cannot retrieve any of the relation tables after insertion

我正在使用 gormGolang,并且我有如下所示的表格。我在检索关系表时遇到问题,例如,当我插入一个新用户时,所有内容都按照下面的日志所示插入,但是一旦我尝试检索该用户,所有应该是字段的字段外部表是 nil[]。从我在数据库中看到的情况来看,这些表的值被插入并且实际上创建了外键,所以可能是什么问题?

型号:

type User struct {
    ID          string `json:"id" gorm:"primaryKey"`
    CreatedAt   time.Time
    UpdatedAt   time.Time
    DeletedAt   gorm.DeletedAt `gorm:"index"`
    License     *License       `json:"license"`
    Statistics  []*Statistic   `json:"statistics"`
    App         *App           `json:"app"`
    Disabled    bool           `json:"disabled"`
    EncryptedID string         `json:"encrypted_id"`
}
//1 of the tables that doesn't get found but exists in database after creation
type License struct {
    gorm.Model
    Key               string  `json:"key"`
    DesktopHardwareID string  `json:"desktop_hardware_id"`
    MobileHardwareID  *string `json:"mobile_hardware_id"`
    Stripe            *Stripe  `json:"stripe" ,gorm:"foreignKey:LicenseID"`
    UserID            string  `json:"user_id"`
}

日志:

2021/05/22 22:01:24 C:/Users/sn3ak/go/pkg/mod/github.com/!project!athenaa/database-module@v0.0.0-20210522190032-e0fbf2b16c12/models/user.go:27 SLOW SQL >= 200ms
[282.555ms] [rows:1] INSERT INTO "licenses" ("created_at","updated_at","deleted_at","key","desktop_hardware_id","mobile_hardware_id","user_id") VALUES ('2021-05-22 22:01:23.937','2021-05-22 22:01:23.937',NULL,'61c31ad3-17cc-49a0-b575-565511550f06','21581f9d-7fa1-4119-8749-c72c468af84f',NULL,'b84c8539-9550-4d80-9812-be27806200b5') ON CONFLICT ("id") DO UPDATE SET "user_id"="excluded"."user_id" RETURNING "id"

2021/05/22 22:01:24 C:/Users/sn3ak/go/pkg/mod/github.com/!project!athenaa/database-module@v0.0.0-20210522190032-e0fbf2b16c12/models/user.go:27 SLOW SQL >= 200ms
[841.373ms] [rows:1] INSERT INTO "users" ("id","created_at","updated_at","deleted_at","disabled","encrypted_id") VALUES ('b84c8539-9550-4d80-9812-be27806200b5','2021-05-22 22:01:23.798','2021-05-22 22:01:23.798',NULL,false,'')

2021/05/22 22:01:25 C:/Users/sn3ak/OneDrive/Desktop/Project Athena/services/integration/src/helpers/helpers.go:107 SLOW SQL >= 200ms
[208.761ms] [rows:1] INSERT INTO "stripes" ("created_at","updated_at","deleted_at","customer_id","subscription_id","renewal_date_timestamp","renewal_date","license_id","id") VALUES ('2021-05-22 22:01:24.078','2021-05-22 22:01:24.078',NULL,'cus_XXXXXXXX','sub_XXXXXXXX',1621713683,'2021-05-22 23:01:23.73','1',1) ON CONFLICT ("id") DO UPDATE SET "license_id"="excluded"."license_id" RETURNING "id"

2021/05/22 22:01:25 C:/Users/sn3ak/OneDrive/Desktop/Project Athena/services/integration/src/helpers/helpers.go:107 SLOW SQL >= 200ms
[415.179ms] [rows:1] INSERT INTO "licenses" ("created_at","updated_at","deleted_at","key","desktop_hardware_id","mobile_hardware_id","user_id","id") VALUES ('2021-05-22 22:01:23.937','2021-05-22 22:01:23.937',NULL,'61c31ad3-17cc-49a0-b575-565511550f06','21581f9d-7fa1-4119-8749-c72c468af84f',NULL,'b84c8539-9550-4d80-9812-be27806200b5',1) ON CONFLICT ("id") DO UPDATE SET "user_id"="excluded"."user_id" RETURNING "id"

2021/05/22 22:01:25 C:/Users/sn3ak/OneDrive/Desktop/Project Athena/services/integration/src/helpers/helpers.go:107 SLOW SQL >= 200ms
[974.912ms] [rows:1] UPDATE "users" SET "created_at"='2021-05-22 22:01:23.798',"updated_at"='2021-05-22 22:01:25.049',"deleted_at"=NULL,"disabled"=false,"encrypted_id"='ad2c949bf98b23cdef3828cbc8c31a920000000000000000000000000000000000000000000000000000000000000000' WHERE "id" = 'b84c8539-9550-4d80-9812-be27806200b5'

提前致谢

var user models.User
//tokens[0] is the ID of the user
db.PostgresClient.Where("id = ?", tokens[0]).First(&user)

要从关系表加载数据,您可以使用 Preload 函数。

要加载所有一级关联,你可以这样做:

db.PostgresClient.Preload(clause.Associations).Where("id = ?", tokens[0]).First(&user)

但是,对于嵌套关联,您需要单独进行:

db.PostgresClient.Preload("License.Stripe").Where("id = ?", tokens[0]).First(&user)

您可以查看 documentation 了解更多详情。