【问题标题】:Cannot retrieve any of the relation tables after insertion插入后无法检索任何关系表
【发布时间】:2021-05-22 19:19:55
【问题描述】:

我正在使用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'

提前致谢

  • 编辑 1 检索行的代码
var user models.User
//tokens[0] is the ID of the user
db.PostgresClient.Where("id = ?", tokens[0]).First(&user)

【问题讨论】:

  • 能否也添加检索数据的代码?
  • 是的,编辑了帖子@EminLaletovic

标签: postgresql go go-gorm


【解决方案1】:

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

要加载所有一级关联,您可以执行以下操作:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 2014-08-08
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多