我有一个时间字段可能为零的结构:
type Order struct {
...
PickupTime *time.Time `json:"-"`
}
我想把它保存到数据库中,sqlx
所以我想我需要按照这里pq.NullTime
的建议使用。
而不是更新Order
对象(我不想将数据库代码泄漏到模型层),我想我可以将 Order 嵌入 aPgOrder
并更改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
. 所以问题一定出在检索部分。如果我从文档中理解正确,则 sqlx 应该能够处理嵌入式结构。