ГОРМ Найти Ассоциацию по иностранным ключам - PullRequest
0 голосов
/ 07 мая 2018

У меня есть следующее 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 по полю, заданному в его отношении внешнего ключа? Это возможно?

...