gorm不会生成字符串列

huangapple go评论129阅读模式
英文:

gorm does not generate string columns

问题

我正在尝试使用gorm将我的模型迁移到PostgreSQL数据库。但是gorm在表中不生成字符串列。以下是我的模型:

  1. type Task struct {
  2. gorm.Model
  3. Answer float64
  4. TaskParts []TaskPart `gorm:"foreignKey:TaskId"`
  5. }
  6. type TaskPart struct {
  7. gorm.Model
  8. Answer float64
  9. Items []BackpackTaskItem `gorm:"foreignKey:TaskPartId"`
  10. TaskId uint
  11. }
  12. type BackpackTaskItem struct {
  13. gorm.Model
  14. Weight float64
  15. Price float64
  16. IsFixed bool
  17. TaskPartId uint
  18. }
  19. type TaskUserSolution struct {
  20. gorm.Model
  21. TaskPartId uint
  22. TaskPart TaskPart `gorm:"foreignKey:TaskPartId;references:ID"`
  23. UserId uint
  24. User User `gorm:"foreignKey:UserId;references:ID"`
  25. }
  26. type User struct {
  27. gorm.Model
  28. username string
  29. password string
  30. }

然后我运行了这行代码:

  1. err = db.AutoMigrate(&Task{}, &TaskPart{}, &BackpackTaskItem{}, &TaskUserSolution{}, &User{})

它没有给我任何错误,并成功创建了表。但是对于用户表,没有字符串列(usernamepassword)。它只有gorm列(id、created_date、deleted_date、updated_date)。

这是一个错误还是我做错了什么?

我的go build是最新的。我尝试给其他模型添加字符串字段,但它也没有创建字符串列。

我完全删除了表,但没有帮助。

go.mod中的gorm版本:

  1. gorm.io/driver/postgres v1.4.5
  2. gorm.io/gorm v1.24.2
英文:

I'm trying to migrate my models to PostgreSQL database using gorm. But gorm does not generate string columns in tables. Here are my models:

  1. type Task struct {
  2. gorm.Model
  3. Answer float64
  4. TaskParts []TaskPart `gorm:"foreignKey:TaskId"`
  5. }
  6. type TaskPart struct {
  7. gorm.Model
  8. Answer float64
  9. Items []BackpackTaskItem `gorm:"foreignKey:TaskPartId"`
  10. TaskId uint
  11. }
  12. type BackpackTaskItem struct {
  13. gorm.Model
  14. Weight float64
  15. Price float64
  16. IsFixed bool
  17. TaskPartId uint
  18. }
  19. type TaskUserSolution struct {
  20. gorm.Model
  21. TaskPartId uint
  22. TaskPart TaskPart `gorm:"foreignKey:TaskPartId;references:ID"`
  23. UserId uint
  24. User User `gorm:"foreignKey:UserId;references:ID"`
  25. }
  26. type User struct {
  27. gorm.Model
  28. username string
  29. password string
  30. }

Then I run this line of code:

  1. err = db.AutoMigrate(&Task{}, &TaskPart{}, &BackpackTaskItem{}, &TaskUserSolution{}, &User{})

It does not give me any errors and successfully creates tables. But for table users there are no string columns (username and password). It has only gorm coumns (id, created_date, deleted_date, updated_date).

Is this a bug or am I doing something wrong?

My go build is up to date. I tried adding string fields to other models, but it did not create string columns either.

I completely dropped tables, but it did not help.

Gorm versions from go.mod:

  1. gorm.io/driver/postgres v1.4.5
  2. gorm.io/gorm v1.24.2

答案1

得分: 3

使用小写字母作为变量名的开头可以使其成为私有变量,在声明变量时使用大写字母作为变量名的开头。

例如:

  1. type User struct {
  2. gorm.Model
  3. Username string
  4. Password string
  5. }

你将得到如下的表格:

gorm不会生成字符串列

英文:

Using lowercase latter at the beginning of the variable name makes it private, Use uppercase at the beginning of the variable name at the time of declaration

Like this :

  1. type User struct {
  2. gorm.Model
  3. Username string
  4. Password string
  5. }

you will get table like this :

gorm不会生成字符串列

huangapple
  • 本文由 发表于 2022年12月8日 20:43:49
  • 转载请务必保留本文链接:https://go.coder-hub.com/74730502.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定