go - GORM 按外键关联查找
问题描述
我有以下内容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
从使用 GORM 中设置的值中找到一个Metric
,它具有 FK 关联。
我试过了:
var relation common.Relation
database.Preload("Relation.Metric").Where(&Relation{
Metric: &Metric{
Name: "temperature",
Medium: "water",
},
}).First(&relation)
尽管Preload
并尝试了Association
和Preload
参数的组合,但以下 SQL 实际上是由 GORM 生成的:
[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
键关系中设置的字段来查找一个?这可能吗?
解决方案
推荐阅读
- angular - 如何将对象存储在具有方法的商店(ngrx、ngxs)中
- server-side - OpenVPN:身份验证失败?
- python - Setuptools Python函数路径语法规范
- hdfs - oozie 错误:不允许访问本地文件系统
- asp.net - 可访问 HttpContext 的 ASP.NET 任务调度
- strpos - 在 Strpos 中排除多个 url - 为什么它不起作用?
- java - 使用 Spring Boot 从命令行接收输入
- go - 根据另一个切片中元素的顺序对切片进行排序
- python - 从 python 中的 pandas.Series 中删除特殊字符?
- javascript - 如何使用 Json 对象填充动态添加的输入字段