我有一个数据库查询,它返回一个额外的计算列以及所有映射的结构列。我希望将它映射回结构中,同时也能够提取不属于结构的计算列。我可以通过使用xorm QueryInterface()函数获得一切,但我似乎找不到如何将结果的map[string]interface{}转换回结构.
有什么想法吗?我看到gorm有db.Model(...).Create(...),但似乎无法在xorm中找到相应的内容。
发布于 2022-11-16 18:38:53
嗯,我找到了一个解决办法,虽然不是一个优雅的,我希望有更好的,所以如果别人有一个好的答案.
基本上,我只是决定使用JSON,然后使用Unmarshal来获取map[string]interface{}并将其转换回结构。这意味着我必须在结构上使用一组json:"..."标记,因为列->属性映射不同于xorm使用的映射。有点难看,但它允许我从数据库查询中捕获额外的道具。
type MyStruct struct {
ID int64 `xorm:"primaryKey"`
ProductID int64 `xorm:"INDEX" json:"product_id"`
Index int64 `xorm:"INDEX NOT NULL DEFAULT 0"`
Code string `xorm:"-" json:"code"`
}
func (b *MyDBStruct) FromMap(src map[string]interface{}) error {
jsonStr, _ := json.Marshal(src)
err := json.Unmarshal(jsonStr, &b)
if err == nil {
for key := range src {
b.AfterSet(key, nil)
}
}
return err
}https://stackoverflow.com/questions/74453134
复制相似问题