使用 Gorm 创建自定义联接表

问题描述 投票:0回答:1

我正在尝试使用 Gorm 定义自定义联接表并遵循文档此处

更新:我的问题是created_at和deleted_at列从未创建:


ERROR: column "created_at" of relation "user_books" does not exist (SQLSTATE 42703)
[1.066ms] [rows:0] INSERT INTO "user_books" ("user_id","book_isbn","created_at","deleted_at") VALUES (6,'1785041851','2024-04-02 21:54:01.082',NULL) ON CONFLICT DO NOTHING

ERROR: column "created_at" of relation "user_books" does not exist (SQLSTATE 42703)
[7.967ms] [rows:1] UPDATE "users" SET "created_at"='2024-04-02 21:46:34.3',"updated_at"='2024-04-02 21:54:01.078',"deleted_at"=NULL,"name"='MockUser' WHERE "users"."deleted_at" IS NULL AND "id" = 6

这就是我所拥有的实体。有用户,他们与书籍具有多对多的关系。

type User struct {
    gorm.Model
    Name  string
    Books []Book `gorm:"many2many:user_books"`
}

type Book struct {
    ISBN  string `gorm:"primaryKey"`
    URL   string `json:"url"`
    Title string `json:"title"`
}

type UserBooks struct {
    UserId    int    `gorm:"primaryKey"`
    BookISBN  string `gorm:"primaryKey"`
    CreatedAt time.Time
    DeletedAt gorm.DeletedAt
}

这就是我自动迁移表的方式:

err = db.AutoMigrate(&User{}, &Book{})
err = db.SetupJoinTable(&User{}, "Books", &UserBooks{})

我如何保存实体:

var book Book
cfg.Database.Table("books").Find(&book, isbn)
user.Books = append(user.Books, book)
err = cfg.Database.Table("users").Save(&user).Error
go go-gorm
1个回答
0
投票

SetupJoinTable
只设置表结构,只有必要的关键字段来建立表之间的关系。

因此您还需要为您的

AutoMigrate
表运行
UserBooks

err = db.AutoMigrate(&User{}, &Book{}, &UserBooks{})
© www.soinside.com 2019 - 2024. All rights reserved.