Fetching NULL datetime value in MySQL using GORM

对着背影说爱祢 提交于 2019-12-10 17:36:57

问题


I want to fetch the last visit_details row having out_time as NULL using Gorm. NIL is itself a type where VisitDetail OutTime is mysql.NullTime.

Code:-

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;"`
}

Query:-

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)

回答1:


Go doesn't recognize NULL in particular. I think you can achieve it using a raw query in GORM. like this.

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

This is one one to fetch the column. Hope this helps.




回答2:


You can set OutTime as a pointer so that it could be null. As seen in the doc:

type YourStruct struct {
     OutTime *time.Time
}

Then run your query

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



回答3:


Just specify IS NULL in the query without the wildcard.

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


来源:https://stackoverflow.com/questions/48899014/fetching-null-datetime-value-in-mysql-using-gorm

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!