我正在对使用 Gorm 时出现的问题进行故障排除。我的sqlite3数据库和Go数据模型可以很好地工作,但是当我在构建环境中遇到一些依赖项问题时,我尝试从供应商文件夹中复制/删除一些包,然后“去获取”,直到我让构建工作...但是现在当我在自己的机器中编译和运行时,我遇到了以前从未有过的问题。
当我尝试这样的事情时(已经检查了configID以确保它具有有效的条目):
var config models.ConfigurationDescription
// Find the Configuration
results := db.Where("id = ?", configID).
Preload("Location").
Find(&config)
Gorm 抛出以下错误:
"invalid field found for struct `models.ConfigurationDescription`'s field Location, need to define a valid foreign key for relations or it need to implement the Valuer/Scanner interface"
这就是我定义数据模型的方式(在依赖关系混乱之前,数据模型工作得很好):
package models
type LocationDescription struct {
ID int `json:"locationID"`
Name string `json:"name"`
IsActive bool `json:"isActive"`
}
func (LocationDescription) TableName() string { return "locations" }
type ConfigurationDescription struct {
ID int `json:"configurationID"`
Name string `json:"name"`
IsActive bool `json:"isActive"`
LocationID int `json:"-"`
Location LocationDescription `json:"location,omitempty" gorm:"foreignKey:ID;references:LocationID"`
}
func (ConfigurationDescription) TableName() string { return "configurations" }
这是使用此设置针对 sqlite 数据库运行的:
CREATE TABLE IF NOT EXISTS locations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
latitude REAL CHECK (latitude > 0),
longitude REAL CHECK (latitude > 0),
is_active INTEGER DEFAULT 0
);
CREATE TABLE IF NOT EXISTS configurations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
location_id INTEGER,
name TEXT,
is_active INTEGER DEFAULT 0,
CONSTRAINT location_fk FOREIGN KEY (location_id) REFERENCES locations(id) ON DELETE CASCADE
);
我知道它正在工作,我没有更改任何代码。我看到的一切看起来都像是按照文档到T,所以对依赖项的更新破坏了某些东西是没有意义的,因为它似乎没有任何重大更改.....
所以问题是,有谁知道可能导致这种情况的原因吗?更重要的是,对如何解决问题有什么建议吗?
慕神8447489
相关分类