我使用的是go-pg (https://github.com/go-pg/pg)和以下代码:
type Book struct {
id int
name string
}
var books []Book
err := db.Model(&books).Select()一切都很好,但我需要添加一个“虚拟”列,如下所示:
concat ('info:', 'id:', id, '...') AS info我试着用:
query.ColumnExpr("concat ('info:', 'id:', id, '...') AS info")但是:
error="pg: can't find column=info in model=Book (try discard_unknown_columns)"
id和name:concat...!我能理解这一点,因为现在go-pg不知道如何绑定数据,但是我真的需要那个字符串,我只能从DB中检索它。
有办法吗?
我可以使用像下面这样的自定义类型吗?
type CustomBook struct {
Info string
Book
}这有道理吗?
发布于 2020-12-31 11:52:30
这种方法可能对你有用:
type Book struct {
ID int
Name string
Info string `pg:"-"`
}
...
db.Model(&books).ColumnExpr("book.*").ColumnExpr("CONCAT('id:', id, 'name:', name) AS info").Select()pg:"-"忽略struct字段,并且它不会被创建,也不会产生任何错误。
这个被忽略的列记录在这里:https://pg.uptrace.dev/models/
另一种方法,取决于您的需求,可以如下所示:
var r []struct {
Name string
Info string
}
db.Model((*Book)(nil)).Column("name").ColumnExpr("CONCAT('id:', id, 'name:', name) AS info").Select(&r)第二个例子是在这里记录的:https://pg.uptrace.dev/queries/
https://stackoverflow.com/questions/60453313
复制相似问题