Rumah >pembangunan bahagian belakang >Golang >Jenis data tidak disokong GORM: &, skema yang salah

Jenis data tidak disokong GORM: &, skema yang salah

WBOY
WBOYke hadapan
2024-02-12 21:18:09474semak imbas

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

Menurut pengenalan editor PHP Banana, GORM ialah perpustakaan ORM bahasa Go yang popular, yang menyediakan kaedah pengendalian pangkalan data yang mudah. Walau bagaimanapun, GORM tidak menyokong semua jenis data, dan skema yang salah mungkin berlaku apabila mengendalikan jenis data tertentu. Ini bermakna apabila menggunakan GORM, pembangun perlu memberi perhatian untuk menggunakan jenis data yang disokong dan memastikan bahawa skema data adalah betul untuk mengelakkan masalah yang mungkin berlaku. Walaupun GORM berkuasa, batasan ini memerlukan pembangun mengendalikannya dengan berhati-hati apabila menggunakannya.

Kandungan soalan

gorm v1.25.1, saya cuba dalam workerposterjob 模型上运行 db.automigrate(),但遇到 [错误] 不支持的数据类型:&[]。 worker 和 job 结构应该具有 many-to-many 关系 ,而 poster 和 job 应该具有 one-to-many 关系。工人和经验、工人和偏好都应该是 one-to-many perhubungan. Tolong bantu.

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

Penyelesaian

Saya dapat mencapai perkara yang anda perlukan dengan kod berikut.

Sila ambil perhatian bahawa demi demonstrasi, saya telah memudahkan model (struktur) anda dengan memasukkan hanya bidang persatuan yang berkaitan. Jika saya terlepas sesuatu yang patut disebut, jangan ragu untuk bertanya dan saya akan mengemas kini jawapan saya.

Saya akan kongsikan kod dahulu dan kemudian terangkan secara terperinci.

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{})
}

Memandangkan soalan anda menyentuh kedua-dua many2manyone2many hubungan, saya akan bahagikan jawapan saya kepada dua bahagian.

many2many Hubungan

Untuk melaksanakan perhubungan ini, anda mesti menambah anotasi gorm:"many2many:workers_posters;joinforeignkey:workersid" di sebelah kepingan yang memegang entiti yang berkaitan. Medan yang terjejas ialah:

  • posters 结构体中的 worker Padang
  • workers 结构体中的 poster Padang

Jelas sekali anda perlu menukar nilai joinforeignkey bergantung pada medan yang anda ingin tetapkan.

one2many Hubungan

Hubungan ini lebih mudah kerana anda tidak perlu menentukan jadual gabungan yang mesti dibuat dalam persatuan many2many 关联中创建的联接表(例如上面创建的 workers_posters (seperti jadual poster_pekerja yang dibuat di atas). Di sini anda hanya perlu membuat dua perubahan ini:

  1. Di padang poster 结构中添加 jobs []job
  2. Di padang job 结构中添加 posterid uint

Jadi jika anda menjalankan kaedah automigrate anda akan melihat jadual yang betul dalam pangkalan data dan semua kunci asing ditetapkan dengan betul.

Sila beritahu saya, terima kasih!

Atas ialah kandungan terperinci Jenis data tidak disokong GORM: &, skema yang salah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam