Rumah >pembangunan bahagian belakang >Golang >Jenis data tidak disokong GORM: &, skema yang salah
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.
gorm v1.25.1, saya cuba dalam worker
、poster
和 job
模型上运行 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"` }
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 many2many
和 one2many
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
Padangworkers
结构体中的 poster
PadangJelas 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
结构中添加 jobs []job
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!