亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Gorm 關系錯誤:需要為關系定義有效的外鍵,或者需要實現 Valuer/Scanner 接口

Gorm 關系錯誤:需要為關系定義有效的外鍵,或者需要實現 Valuer/Scanner 接口

Go
一只斗牛犬 2022-08-30 21:47:34
我正在對使用 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 modelstype 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,所以對依賴項的更新破壞了某些東西是沒有意義的,因為它似乎沒有任何重大更改.....所以問題是,有誰知道可能導致這種情況的原因嗎?更重要的是,對如何解決問題有什么建議嗎?
查看完整描述

1 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

在我看來,您在位置描述字段中的標簽是錯誤的。

首先,這是一種屬于關系模式。

  • foreignKey應命名聯接到外部實體的模型本地鍵字段。

  • references應命名外部實體的主鍵或唯一鍵。

嘗試使用:

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:LocationID;references:ID"`

}


查看完整回答
反對 回復 2022-08-30
  • 1 回答
  • 0 關注
  • 816 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號