我试图用Gorm定义一个自定义连接表,并遵循文档here.
Update:我的问题是,列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