在使用PG数据库时,我们可以将某些数据转换成二进制数据储存到数据库中
type BaseQuestionnaire struct {
ID int64 `json:"id"`
CreateDate time.Time `json:"create_date"`
Title string `json:"title"`
Describe string `json:"describe"`
SubjectID int64 `json:"subject_id"`
Main []byte `json:"-" gorm:"type:jsonb"`
MainObject []Main `json:"main" gorm:"-"`
}
如以上的结构体,我们的Main在接受前的数据的json字段中使用 "-" 忽略,仅用于gorm的使用,而MainObject在gorm时使用 "-" 忽略,仅用于接受json数据
当然,我们得让这两个字段产生联系
在create时,我们需要将前端数据转成二进制得数据进行存储,如图中得方法所示
func (g *BaseQuestionnairesService) Create(BaseQuestionnaire *model.BaseQuestionnaire) (err error) {
BaseQuestionnaire.Main, _ = json.Marshal(BaseQuestionnaire.MainObject)
if err = dao.DB.Create(&BaseQuestionnaire).Error; err != nil {
return err
}
return
}
而在get的时候,我们需将二进制代码转成原来的格式进行返回
func (g *BaseQuestionnairesService) GetById(id int) (BaseQuestionnaire *model.BaseQuestionnaire, err error) {
BaseQuestionnaire = &model.BaseQuestionnaire{} // 初始化结构体指针
if err = dao.DB.Where("id = ?", id).First(BaseQuestionnaire).Error; err != nil {
return nil, err
}
var baseQuestionnaire []model.Main
err = json.Unmarshal(BaseQuestionnaire.Main, &baseQuestionnaire)
BaseQuestionnaire.MainObject = baseQuestionnaire
return BaseQuestionnaire, nil
}
当然,在getall和update等一些方法中也要转换数据,切记不要忘记