猿问

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

下面的这个查询有效,该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-usage

type 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-usage

type 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)



慕娘9325324
浏览 208回答 1
1回答

蝴蝶刀刀

可以使用 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 ...    }
随时随地看视频慕课网APP

相关分类

Go
我要回答