如何保存结构数组



我正在尝试保存一个结构数组
我试过了:

type ShiftValue struct {
Hour   uint8 `json:"hour"`
Minute uint8 `json:"minute"`
}
type Shift struct {
Start ShiftValue `json:"start"`
End   ShiftValue `json:"end"`
}
type Config struct {
ID                        uuid.UUID       `gorm:"type:uuid;primary_key;index;" json:"id"`
CreatedAt                 time.Time       `json:"created_at"`
UpdatedAt                 time.Time       `json:"updated_at"`
DeletedAt                 *time.Time      `json:"deleted_at,omitempty"`
Shifts                    []Shift         `gorm:"type:varchar(100)[];" json:"shifts,"`
}

但不起作用。我还试图将Shifts保存为pq.StringArray:

type Config struct {
ID                        uuid.UUID       `gorm:"type:uuid;primary_key;index;" json:"id"`
CreatedAt                 time.Time       `json:"created_at"`
UpdatedAt                 time.Time       `json:"updated_at"`
DeletedAt                 *time.Time      `json:"deleted_at,omitempty"`
Shifts                    pq.StringArray  `gorm:"type:varchar(100)[];" json:"shifts,"`
}

这是可行的,但我不知道如何将Shift的切片转换为StringArray
我应该使用GenericArrray
如何从Slice转换为GenericArrayStringArray

当我Unmarshall数据时,我在以下结构中进行,我验证数据,然后我想将其保存到数据库:

type ConfigUpdate struct {
Shifts                    []Shift         `json:"shifts,"`
}

在gorm嵌入式结构测试中可以看到的最接近的场景是

package gorm_test
import "testing"
type BasePost struct {
Id    int64
Title string
URL   string
}
type Author struct {
ID    string
Name  string
Email string
}
type HNPost struct {
BasePost
Author  `gorm:"embedded_prefix:user_"` // Embedded struct
Upvotes int32
}
type EngadgetPost struct {
BasePost BasePost `gorm:"embedded"`
Author   Author   `gorm:"embedded;embedded_prefix:author_"` // Embedded struct
ImageUrl string
}

可以看出,所有这些基本结构都有Id在父结构中被称为foreign键。

另一个可以在StackOverflow中找到处理的场景是另一个答案。

type Children struct {
Lat float64
Lng float64
}
type ChildArray []Children
func (sla *ChildArray) Scan(src interface{}) error {
return json.Unmarshal(src.([]byte), &sla)
}
func (sla ChildArray) Value() (driver.Value, error) {
val, err := json.Marshal(sla)
return string(val), err
}
type Parent struct {
*gorm.Model    
Childrens ChildArray `gorm:"column:childrens;type:longtext"`
}

请你自己核实,因为我没有设置gorm。我刚刚做了R&D部分。我希望它能帮助我们很多人。谢谢

最新更新