Post

GORMでモデルのstructをwhereに使うと動かない

Problem

I defined model like below:

type Hostname struct { ID uint `gorm:"primaryKey"` IP string `gorm:"type:string;index:ip_uq,unique;"` Hostname *string `gorm:"type:string;"` ErrorFlg bool `gorm:"type:bool;default:false;"` }

And I’d like to perform like below:

SELECT * FROM `hostnames` WHERE hostname is null and error_flg = false LIMIT 10

I tried with db.Where(&models.Hostname{Hostname: nil, ErrorFlg: false}).Find(&hostnames), then got message which represented raw SQL without “where” a log below:

[11.348ms] [rows:78] SELECT * FROM `hostnames`

Solution

No use model struct in “Where”. db.Where("hostname is null and error_flg = ?", false).Limit(10).Find(&hostnames)

References

(TIL) Don’t use struct in GORM while building “where” clause | by Michał Kutrzeba | Medium

This post is licensed under CC BY 4.0 by the author.