Получение значения даты и времени NULL в MySQL с использованием GORM

Я хочу получить последнюю строку visit_details с out_time как NULL с помощью Gorm. NIL сам по себе является типом, где VisitDetail OutTime равен mysql.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)

person duggu    schedule 21.02.2018    source источник


Ответы (4)


Go, в частности, не распознает NULL. Я думаю, вы можете добиться этого, используя необработанный запрос в GORM. как это.

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

Это один для извлечения столбца. Надеюсь это поможет.

person arundeepak    schedule 21.02.2018

Вы можете установить OutTime как указатель, чтобы он мог быть нулевым. Как показано в документе:

type YourStruct struct {
     OutTime *time.Time
}

Затем запустите свой запрос

db.Where("out_time = ?", nil).Last(&visitDetail)
person Emmanuel Vlad    schedule 21.02.2018
comment
Этот ответ должен был быть принят! (не все люди используют горм) - person Abhishek Ghosh; 15.11.2019

Просто укажите IS NULL в запросе без подстановочного знака.

db.Where("out_time IS NULL").Last(&visitDetail)
person Jess    schedule 03.07.2019

Правильный код:

db.Where("out_time is ?", nil).Last(&visitDetail)
person Artem Kryhin    schedule 29.09.2020
comment
Привет Артем. Этот ответ повторяет ответ @Emmanuel. Пожалуйста, прочитайте Как написать хороший ответ? - person Tomer Shetah; 29.09.2020