如何在GORM中获取字段值?关联同分类商品功能报错求助
问题修复:获取同分类商品并解决类型转换错误
错误原因
你代码里的Where("cat_id", func(tx *gorm.DB) *gorm.DB { ... })用法完全错误,Gorm的Where条件第二个参数需要直接传入匹配值,你却传了一个函数,导致Gorm尝试把函数指针转换成Int8类型,触发了cannot convert 0xa182e0 to Int8错误。
正确实现代码
func GetProductsById(c *gin.Context) { var targetProduct models.Products var relativeProducts []models.Products // 1. 根据ID获取目标商品,先处理查询失败的情况 prodID := c.Query("prod_id") if err := config.DB.Where("id=?", prodID).First(&targetProduct).Error; err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } // 2. 查询同分类且排除当前商品的5个相似商品 err := config.DB.Where("cat_id = ? AND id != ?", targetProduct.CatID, targetProduct.ID).Limit(5).Find(&relativeProducts).Error if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } // 3. 返回结果 c.JSON(http.StatusOK, gin.H{ "data": []models.Products{targetProduct}, "relatives": relativeProducts, }) }
关键调整说明
- 先单独查询目标商品,确保拿到正确的
cat_id,避免重复查询 - 查询相似商品时,通过
AND id != ?排除当前商品,避免把自己放到相似列表里 - 使用
Limit(5)严格限制返回5条数据 - 拆分错误处理逻辑,每个数据库操作都单独处理错误,避免嵌套导致的逻辑混乱
内容的提问来源于stack exchange,提问作者Casper
相关产品推荐
相关产品推荐

