GORM通过struct查询字段的零值

文章介绍了在使用GORM进行数据库查询时,如果字段包含零值(如0,,false等),GORM不会将这些字段包含在查询中。提供了三种解决方案:1)使用指针类型,2)使用scanner/valuer如`sql.NullInt64`,3)使用map或原生SQL明确指定查询条件。这三种方法都能确保零值字段在查询中得到考虑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

解决方案

方案一

使用指针

方式二 

方式三 


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)

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值