为了账号安全,请及时绑定邮箱和手机立即绑定

Gorm WHERE 子句不适用于预加载数据

Gorm WHERE 子句不适用于预加载数据

Go
慕娘9325324 2022-04-20 19:29:19
下面的这个查询有效,该where子句之所以有效,是因为它使用了ResourceUsage结构中的值,但我希望能够做这样的事情,其中where子句使用ResourceMetadata结构中的值。db.Preload("ResourceMetadata").Where("resource_type = ?", resourceType).Where("timestamp BETWEEN ? AND ?", start, end).Limit(10).Find(&resourceUsage)但它抛出异常:2019-12-03 11:06:12] 错误 1054:“where 子句”中的未知列“resource_type”代码:// ResourceUsage describes the storage model for resource-usagetype ResourceUsage struct {    ID               int64             `json:"-"`    DetailsID        int64             `json:"details_id"`    ResourceMetadata *ResourceMetadata `gorm:"foreignkey:DetailsID;association_foreignkey:ID"`    MeasuredType     string            `json:"measured_type"`    Quantity         float64           `json:"quantity"`    Timestamp        int64             `json:"timestamp"`}// ResourceMetadata describes the storage model for resource-usagetype ResourceMetadata struct {    ID                  int64  `json:"-"`    ResourceUUID        string `json:"resource_uuid"`    ResourceName        string `json:"resource_name"`    ResourceDisplayName string `json:"resource_display_name"`    ResourceType        string `json:"resource_type"`}db.Preload("ResourceMetadata").Where("timestamp BETWEEN ? AND ?", start, end).Limit(10).Find(&resourceUsage)
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

可以使用 JOIN 吗?


    resourceUsages := []ResourceUsage{}

    if err := db.Joins("JOIN resource_metadata ON resource_metadata.id=details_id").

        Where("resource_metadata.resource_type = ? AND timestamp BETWEEN ? AND ?", resourceType, start, end).

        Preload("ResourceMetadata").Limit(10).

        Find(&resourceUsages).Error; err != nil {

        // ... handle error ...

    }


查看完整回答
反对 回复 2022-04-20
  • 1 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号