首頁 > 後端開發 > Golang > 主體

GORM 不支援的資料類型:&、不正確的架構

WBOY
發布: 2024-02-12 21:18:09
轉載
369 人瀏覽過

GORM 不支持的数据类型:&、不正确的架构

根據php小編香蕉的介紹,GORM是一款流行的Go語言ORM庫,它提供了便捷的資料庫操作方式。然而,GORM並不支援所有的資料類型,並且在處理某些資料類型時可能會出現錯誤的架構。這意味著在使用GORM時,開發者需要注意使用支援的資料類型,並確保資料架構正確,以避免潛在的問題。雖然GORM功能強大,但這些限制需要開發者在使用時謹慎處理。

問題內容

gorm v1.25.1,我嘗試在​​workerposterjob 模型上執行db.automigrate(),但遇到[錯誤] 不支援的資料類型:&[]。 worker 和 job 結構應該有 many-to-many 關係 ,而 poster 和 job 應該有 one-to-many 關係。工人和經驗、工人和偏好都應該是 one-to-many 關係。請幫忙。

package model

type experience struct {
    gorm.Model
    Company  int    `json:"company"`
    JobTitle string `json:"jobTitle"`
    WorkerID uint
}

type preference struct {
    gorm.Model
    JobTitle string `json:"JobTitle"`
    MinPay   int    `json:"minPay"`
    MaxPay   int    `json:"maxPay"`
    WorkerID uint
}

type Worker struct {
    gorm.Model
    Username     string       `gorm:"uniqueIndex;not null" json:"username"`
        ...more fields
    Experience   []experience `json:"experience"`
    Preference   []preference `json:"preference"`
    AppliedJobs  []Job        `gorm:"many2many:worker_jobs;" json:"appliedJobs"`
}

type Poster struct {
    gorm.Model
    Name       string `gorm:"uniqueIndex;not null" json:"name"`
    Email      string `gorm:"uniqueIndex;not null" json:"email"`
    Phone      string `json:"phone"`
    JobsPosted []Job  `json:"jobsPosted"`
}

type Job struct {
    gorm.Model
    Title       string   `gorm:"uniqueIndex;not null" json:"title"`
        ...more fields
    PosterID uint `json:"posterID"`
}
登入後複製

解決方法

我能夠透過以下程式碼實現您所需要的。

請注意,為了演示,我透過僅包含關聯的相關欄位來簡化您的模型(結構)。如果我遺漏了一些值得一提的內容,請隨時詢問,我會更新我的答案。

我先分享一下程式碼,然後再詳細解釋。

package main

import (
    "gorm.io/driver/postgres"
    "gorm.io/gorm"
)

type Worker struct {
    gorm.Model
    Username string `gorm:"uniqueIndex;not null" json:"username"`

    Posters []Poster `gorm:"many2many:workers_posters;joinForeignKey:postersId"`
}

type Poster struct {
    gorm.Model
    Name  string `gorm:"uniqueIndex;not null" json:"name"`
    Email string `gorm:"uniqueIndex;not null" json:"email"`
    Phone string `json:"phone"`

    Workers []Worker `gorm:"many2many:workers_posters;joinForeignKey:workersId"`
    Jobs    []Job
}

type Job struct {
    gorm.Model
    Title    string `gorm:"uniqueIndex;not null" json:"title"`
    PosterID uint   `json:"posterID"`
}

func main() {
    dsn := "host=localhost port=54322 user=postgres password=postgres dbname=postgres sslmode=disable"
    db, err := gorm.Open(postgres.Open(dsn))
    if err != nil {
        panic(err)
    }

    db.AutoMigrate(&Worker{}, &Poster{}, &Job{})
}
登入後複製

由於您的問題同時涉及 many2manyone2many 關係,因此我將把我的答案分為兩部分。

many2many 關係

要實現這種關係,您必須在保存關聯實體的切片旁邊添加註釋 gorm:"many2many:workers_posters;joinforeignkey:workersid"。受影響的欄位是:

  • posters 結構體中的 worker 欄位
  • workers 結構體中的 poster 欄位

顯然,您必須根據要設定的欄位變更 joinforeignkey 的值。

one2many 關係

這種關係甚至更簡單,因為您不必指定必須在 many2many 關聯中建立的聯接表(例如上面建立的 workers_posters 表)。在這裡,您只需要做這兩個更改:

  1. poster 結構中新增 jobs []job 欄位
  2. job 結構中新增 posterid uint 欄位

因此,如果您執行 automigrate 方法,您將在資料庫中看到正確的表,並且所有外鍵都已正確設定。

請告訴我,謝謝!

以上是GORM 不支援的資料類型:&、不正確的架構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!