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

JonB:

下面的查询在这里起作用,因为该where子句使用的是ResourceUsagestruct 的值,所以子句起作用了,但是我很希望能够做到这一点,其中该where子句使用的是ResourceMetadatastruct的

db.Preload(“ ResourceMetadata”)。Where(“ resource_type =?”,resourceType).Where(“ timestamp BETWEEN?AND?”,开始,结束).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)
Marco Pantaleoni:

您可以使用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 ...
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章