Jenis data tidak disokong GORM: &, skema yang salah

WBOY
Lepaskan: 2024-02-12 21:18:09
ke hadapan
369 orang telah melayarinya

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"`
}
Salin selepas log masuk

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{})
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!