下面的这个查询有效,该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 ...
}
- 1 回答
- 0 关注
- 207 浏览
添加回答
举报
0/150
提交
取消