使用 GORM 在 MySQL 中获取空日期时间值



我想使用 Gorm 获取最后一行out_timeNULLvisit_details。NIL本身就是VisitDetail OutTimemysql.NullTime的一种类型。

法典:-

var visitDetail models.VisitDetail
db.Where("out_time=? ", nil).Last(&visitDetail)
//model VisitDetails
type VisitDetail struct {
Id              int
Visitor         Visitor  `gorm:"foreignkey:ClientId;association_foreignkey:Id"`
VisitorId       int      `gorm:"not null;"`
Location        Location `gorm:"foreignkey:LocationId;association_foreignkey:Id"`
LocationId      int      `gorm:"not null;"`
Purpose         string
InTime          time.Time `gorm:"not null;"`
OutTime         mysql.NullTime
User            User `gorm:"foreignkey:ClientId;association_foreignkey:Id"`
UserId          int  `gorm:"not null;"`
Status          int  `gorm:"not null;"`
ApproveByClient int  `gorm:"not null;"`
}

查询:-

select * from visit_details where out_time is NULL order by id desc limit 1;
+----+------------+-------------+---------+---------------------+----------+---------+--------+-------------------+
| id | visitor_id | location_id | purpose | in_time             | out_time | user_id | status | approve_by_client |
+----+------------+-------------+---------+---------------------+----------+---------+--------+-------------------+
| 20 |          1 |           8 |         | 2018-02-20 17:13:25 | NULL     |    1609 |      0 |                 0 |
+----+------------+-------------+---------+---------------------+----------+---------+--------+-------------------+
1 row in set (0.04 sec)

您可以将 OutTime 设置为指针,以便它可以为 null。如文档所示:

type YourStruct struct {
OutTime *time.Time
}

然后运行查询

db.Where("out_time = ?", nil).Last(&visitDetail)

Go 不能特别识别 NULL。 我认为您可以使用 GORM 中的原始查询来实现它。 喜欢这个。

db.Raw("SELECT * FROM visit_details WHERE out_time is NULL order by id desc limit 1").Scan(&visitDetail)

这是一个获取列的方法。希望这有帮助。

只需在查询中指定IS NULL而不使用通配符即可。

db.Where("out_time IS NULL").Last(&visitDetail)

正确的代码是:

db.Where("out_time is ?", nil).Last(&visitDetail)

相关内容

  • 没有找到相关文章

最新更新