You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:12:22