V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
ysongyang
V2EX  ›  Go 编程语言

gorm 自定义预加载的 正确用法是什么?一直报错: invalid query condition

  •  
  •   ysongyang · 2020-09-03 15:46:51 +08:00 · 1386 次点击
    这是一个创建于 1543 天前的主题,其中的信息可能已经有所发展或是发生改变。
    // 首页活动模块区域分类表模型
    type LabelType struct {
        Model
        Id           int    `json:"id";gorm:"primary_key"`
        MallId       int    `json:"mall_id"`
        Name         string `json:"name"`
        Weigh        int    `json:"weigh"`  // 权重
        GoodsList []Goods `gorm:"ForeignKey:LabelId" json:"goods_list"` //查询当前分类下的商品集合
    }
    
    type Goods struct {
        Model
        GoodsId         int               `json:"goods_id" gorm:"primary_key"`
        MallId          int               `json:"mall_id"`     // 商城 id
        LabelId         int               `json:"label_id"`    // 关联 mall_label_type
        GoodsName       string            `json:"goods_name"`  // 商品名称
        CategoryId      int               `json:"category_id"` // 分类 id
        SmallImage      string            `json:"small_image"` // 商品缩略图
        Images          string            `json:"images"`
        Category        Category `gorm:"foreignkey:CategoryID" json:"category"` //分类表
    }
    
    func (labelModel *LabelType) GetAll(params *request.IndexParams) (labelTypes []*LabelType) {
    err := db.Debug().Model(&labelTypes).
            Preload("GoodsList", func(query *gorm.DB) *gorm.DB {
                return query.Order("goods_id desc")
            }).
            Preload("GoodsList.Category").
            Where("mall_id = ? and status = ?", params.MallId, "normal").Order("weigh desc").
            Find(&labelTypes).Error
        if err != nil && err != gorm.ErrRecordNotFound {
            return nil
        }
        return labelTypes
    }
    
    7 条回复    2020-09-04 16:15:02 +08:00
    ysongyang
        1
    ysongyang  
    OP
       2020-09-03 17:05:18 +08:00
    LabelType 代码补全
    ```
    // 首页活动模块区域分类表模型
    type LabelType struct {
    Model
    Id int `gorm:"primary_key" json:"id"`
    MallId int `json:"mall_id"`
    Name string `json:"name"`
    Images string `json:"images"` // 背景图
    Status string `json:"-"` // normal 开启 hidden 关闭
    Weigh int `json:"weigh"` // 权重, 越大越靠前
    CreateTime int `json:"-"`
    UpdateTime int `json:"-"`
    GoodsList []LitestoreGoods `gorm:"ForeignKey:LabelId" json:"goods_list"` //查询当前分类下的商品集合
    }
    ```
    ysongyang
        2
    ysongyang  
    OP
       2020-09-03 17:19:46 +08:00
    加 func(query gorm.DB) gorm.DB { return query.Order("goods_id desc")} 就会报错
    invalid query condition:
    不加这个是可以正常查询的
    EileenJ
        3
    EileenJ  
       2020-09-03 18:26:58 +08:00 via Android
    去掉 Model(&labelTypes)试下
    ysongyang
        4
    ysongyang  
    OP
       2020-09-04 08:59:30 +08:00
    @EileenJ 没用的。能使的方法都试过。
    Carlgao
        5
    Carlgao  
       2020-09-04 10:30:28 +08:00
    你的 ForeignKey:LabelId 写错了吧,难道不是应该是 GoodId 吗,然而在你的 LabelType 结构体里面没有看到这个字段
    ysongyang
        6
    ysongyang  
    OP
       2020-09-04 14:14:37 +08:00
    @Carlgao 我查询的是 模块分类列表,然后列出 模块分类下的商品集合,没毛病吧。而且我也说了呀 加 func(query gorm.DB) gorm.DB { return query.Order("goods_id desc")} 就会报错, 不加这个 是可以正常查出来我想要的数据的呀。
    ysongyang
        7
    ysongyang  
    OP
       2020-09-04 16:15:02 +08:00
    问题已解决!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2861 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:33 · PVG 20:33 · LAX 04:33 · JFK 07:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.