使用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
}

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
错误信息"Error 1045 (28000): Access denied for user 'gorm'@'localhost' (using password: YES)"表示无法使用给定的用户名和密码连接到MySQL数据库。根据引用和引用的解决方案,您可以尝试以下步骤来解决这个问题: 1. 检查用户名和密码:确保您正在使用正确的用户名和密码登录MySQL数据库。注意区分大小写,并确保没有输入错误的字符。 2. 检查权限:确认用户'gorm'是否具有足够的权限来访问所需的数据库。您可以通过在MySQL运行以下命令来检查和更改权限: ``` GRANT ALL PRIVILEGES ON database_name.* TO 'gorm'@'localhost'; FLUSH PRIVILEGES; ``` 将`database_name`替换为实际的数据库名称。 3. 检查连接配置:确保您的连接字符串的用户名、密码以及主机和端口号等连接配置正确无误。您可以参考引用的示例代码来检查和修改连接配置。 4. 检查网络连接:确保您的网络连接正常,并且可以访问MySQL数据库所在的主机。尝试使用其他工具或方法连接到数据库以验证网络连接是否正常。 如果您尝试了以上步骤仍然无法解决问题,建议您查看MySQL的错误日志以获取更多详细的错误信息,并尝试在相关的开发者社区或论坛上寻求帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [使用go链接MySQL数据库报错:Error 1045: Access denied for user ‘root‘@‘localhost‘ (using password:...](https://blog.csdn.net/vivisol/article/details/122684627)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [连腾讯云上的docker上的mysql报错ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ ...](https://download.csdn.net/download/weixin_38732519/14074606)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值