У меня есть следующее struct
:
type Relation struct {
Metric *Metric `gorm:"foreignkey:MetricID"`
MetricID uint
...
}
Metric
определяется как:
type DatabaseMeta struct {
Id uint `json:"-" gorm:"primary_key"`
}
type Metric struct {
DatabaseMeta
Name string `json:"name"`
Medium string `json:"medium"`
}
Я бы хотел найти Relation
из значения, установленного в Metric
, используя GORM, который имеет ассоциацию FK.
Я пытался:
var relation common.Relation
database.Preload("Relation.Metric").Where(&Relation{
Metric: &Metric{
Name: "temperature",
Medium: "water",
},
}).First(&relation)
Несмотря на Preload
и попытки сочетания аргументов Association
и Preload
, GORM на самом деле генерирует следующий SQL:
[2018-05-06 18:47:37] sql: converting argument $1 type: unsupported type common.Metric, a struct
[2018-05-06 18:47:37] [0.14ms] SELECT * FROM "relations" WHERE ("relations"."metric" = '{{0} temperature water}') LIMIT 1
[0 rows affected or returned ]
Это работает и является концептуально тем, что я ищу:
// Look up the metric from `Name` and `Medium` fields
var metric Metric
database.Where(&Metric{
Name: "temperature",
Medium: "water",
}).First(&metric)
// Use the `metric` FK directly to search for the `relation`
var relation Relation
database.Where(&Relation{
MetricID: metric.DatabaseMeta.Id,
}).First(&relation)
Как я могу использовать GORM для поиска struct
по полю, заданному в его отношении внешнего ключа? Это возможно?