使用gorm时,如果对象中某个参数为数组类型,查询传入参数为数组类型时,如何编写响应的语句

定义实体对象

type Project struct {
	ID          int               `gorm:"primaryKey" json:"id"`                                   //项目主键
	ProjectName string            `gorm:"project_name" json:"project_name"`                       //项目名称
	Status      int               `gorm:"status" json:"status"`                                   //项目状态
	DistrictIDs *pq.Int64Array    `gorm:"column:district_ids;type:integer[]" json:"district_ids"` //区ID
	CreatedBy   string            `gorm:"column:created_by" json:"created_by"`                    //创建人
	CreatedTime *types.HQDateTime `gorm:"column:created_time" json:"created_time"`                //创建时间
	Year        string            `gorm:"column:year" json:"year"`                                // 建成时间
}

func (p *Project) TableName() string {
	return "project"
}

定义传输参数 url

http://localhost:3025/api/project?districts=1&districts=2

golang 接入参数

	if districts, ok := ctx.GetQueryArray("districts"); ok {
		array := convertStringArrayToIntArray(districts)
		var conditions []string
		for _, num := range array {
			conditions = append(conditions, fmt.Sprintf("%d", num))
		}
		whereClause := fmt.Sprintf("district_ids && ARRAY[%s]::integer[]", strings.Join(conditions, ","))
	
		err := db.Raw("SELECT * FROM project WHERE " + whereClause)
	}

转化string数组到int数组

func convertStringArrayToIntArray(inputs []string) []int {
	var intArray []int

	// 遍历字符串数组,将每个字符串转换为整数并存储到整数数组中
	for _, str := range inputs {
		num, err := strconv.Atoi(str)
		if err != nil {
			fmt.Printf("Error converting string to int: %v\n", err)
			continue
		}
		intArray = append(intArray, num)
	}
	return intArray
}

按照上述方式可以实现字段为数组,传入为数组查询的条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值