我有一个时间字段一个struct,可能是无返回值来嵌入建议here。结构与SQLX不从数据库
而是更新Order
对象(我不想泄露DB代码到模型层)的,我想我可以在PgOrder
使嵌入秩序和改变PickupTime
类型:
type PgOrder struct {
Order
PickupTime pq.NullTime
}
问题是当我简单地更新数据库中的Order
,然后转过头来获取该订单时,返回的PickupTime
为空。
// update
func (pg Postgres) UpdateOrderPickupTime(order *Order, pickupTime time.Time) error {
_, err := pg.Exec(`UPDATE orders SET pickup_time = $1 WHERE id = $2`, pickupTime, order.ID)
return err
}
// retrieve
func (pg Postgres) GetOrder(orderID DatabaseID) (*Order, error) {
pgOrder := PgOrder{}
err := pg.Get(&pgOrder, `SELECT * FROM orders WHERE id = $1`, orderID)
if err == sql.ErrNoRows {
return nil, nil
}
... // at this point pgOrder.PickupTime is 0001-01-01 00:00:00 +0000 UTC
}
如果我把一个断点悫更新和检索,我可以检查数据库,看到的值被保存为2017-04-20 12:05:37-04
。所以问题必须在检索部分。如果我明白从docs开始,sqlx应该能够处理嵌入式结构。
什么是数据库本身的价值:所以就像你与
json
标签一样,你可以用db
标签这样做呢? '0001-01-01 00:00:00 +0000 UTC'看起来像从数据库中读取零时间 - 如果读取了NULL,我认为它是'nil'。 – Flimzy数据库中的值看起来像'2017-04-20 12:05:37-04' – tir38
只是猜测,但您是否尝试更改'PgOrder'字段的顺序?也就是说,在底部嵌入'Order'并在其上面具有'PickupTime pq.NullTime'。像这样:https://play.golang.org/p/_QdVNbWcqS – mkopriva