目录
type Person struct {
UserId int `gorm:"column:user_Id;AUTO_INCREMENT;primaryKey"`
//User User `gorm:"embedded;association_foreignkey:UserId"`
Email string
Name string
Sex string
Egg int
}
func (Person) TableName() string {
return "person"
}
当通过struct进行查询的时候,GORM 将会查询这些字段的非零值, 意味着你的字段包含
0
, ' ', false
或者其他 零值, 将不会出现在查询语句中
解决方案
方案一
将字段使用指针类型或者 scanner/valuer 来避免这种情况。
使用指针
type Person struct {
UserId int `gorm:"column:user_Id;AUTO_INCREMENT;primaryKey"`
//User User `gorm:"embedded;association_foreignkey:UserId"`
Email string
Name string
Sex string
Egg *int
}
func (Person) TableName() string {
return "person"
}
main{
i:=0
database.Debug().Where(&Person{Egg: &i}).Find(&Person{}).Scan(&person)
fmt.Println(person)
}
使用scanner/valuer
type Person struct {
UserId int `gorm:"column:user_Id;AUTO_INCREMENT;primaryKey"`
//User User `gorm:"embedded;association_foreignkey:UserId"`
Email string
Name string
Sex string
Egg sql.NullInt64
}
func (Person) TableName() string {
return "person"
}
main{
database.Debug().Where(&Person{Egg: sql.NullInt64{ 0,true}}).Find(&Person{}).Scan(&person)
fmt.Println(person)
}
方式二
使用 map,其会包含所有 key-value 的查询条件
type Person struct {
UserId int `gorm:"column:user_Id;AUTO_INCREMENT;primaryKey"`
//User User `gorm:"embedded;association_foreignkey:UserId"`
Email string
Name string
Sex string
Egg int
}
func (Person) TableName() string {
return "person"
}
main{
database.Debug().Where(map[string]interface{}{ "Egg": 0}).Find(&Person{}).Scan(&person)
fmt.Println(person)
}
方式三
使用原生sql
type Person struct {
UserId int `gorm:"column:user_Id;AUTO_INCREMENT;primaryKey"`
//User User `gorm:"embedded;association_foreignkey:UserId"`
Email string
Name string
Sex string
Egg int
}
func (Person) TableName() string {
return "person"
}
main{
database.Debug().Where( "person.egg=?" ,0).Find(&Person{}).Scan(&person)
fmt.Println(person)
}