ホームページ >バックエンド開発 >Golang >GORM でサポートされていないデータ型: &、間違ったスキーマ

GORM でサポートされていないデータ型: &、間違ったスキーマ

WBOY
WBOY転載
2024-02-12 21:18:09469ブラウズ

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

PHP エディタ Banana の紹介によると、GORM は人気のある Go 言語の ORM ライブラリであり、便利なデータベース操作方法を提供します。ただし、GORM はすべてのデータ型をサポートしているわけではなく、特定のデータ型を処理するときに誤ったスキーマが発生する可能性があります。つまり、GORM を使用する場合、開発者はサポートされているデータ型を使用することと、潜在的な問題を回避するためにデータ スキーマが正しいことを確認することに注意する必要があります。 GORM は強力ですが、これらの制限があるため、開発者は使用する際に注意して扱う必要があります。

質問内容

gorm v1.25.1、workerposterjobモデルで実行してみましたdb.automerge() を実行しましたが、[エラー] サポートされていないデータ型: &[] が発生しました。ワーカーとジョブ構造は 多対多の関係 を持つ必要があり、投稿者とジョブは 1 対多 の関係を持つ必要があります。ワーカーと経験、ワーカーと好みはすべて 1 対多 の関係である必要があります。助けてください。

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"`
}

解決策

次のコードで必要なことを達成できました。

デモンストレーションのために、関連付けの関連フィールドのみを含めることでモデル (構造) を簡略化していることに注意してください。言及する価値のあるものを見逃している場合は、お気軽に質問してください。回答を更新します。

最初にコードを共有してから、詳しく説明します。

リーリー

あなたの質問には many2manyone2many の両方の関係が含まれているため、回答を 2 つの部分に分けます。

多くの2多くの関係

この関係を実装するには、関連付けられたエンティティを保持するスライスの横に注釈 gorm:"many2many:workers_posters;joinforeignkey:workersid" を追加する必要があります。影響を受けるフィールドは次のとおりです:

  • posters worker 構造体のフィールド
  • workers poster 構造体のフィールド

明らかに、設定するフィールドに応じて joinforeignkey の値を変更する必要があります。

one2many関係

この関係は、many2many 関連付けで作成する必要がある結合テーブル (上で作成した workers_posters テーブルなど) を指定する必要がないため、さらに単純になります。ここでは、次の 2 つの変更を加えるだけです:

  1. poster 構造に jobs []job フィールド
  2. を追加します
  3. posterid uint フィールドを job 構造体
  4. に追加します。

したがって、automerge メソッドを実行すると、データベース内に正しいテーブルが表示され、すべての外部キーが正しく設定されていることがわかります。

教えてください、ありがとう!

以上がGORM でサポートされていないデータ型: &、間違ったスキーマの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。