Gemäß der Einführung des PHP-Editors Banana ist GORM eine beliebte ORM-Bibliothek in der Go-Sprache, die praktische Methoden für den Datenbankbetrieb bietet. Allerdings unterstützt GORM nicht alle Datentypen und bei der Verarbeitung bestimmter Datentypen können falsche Schemata auftreten. Dies bedeutet, dass Entwickler bei der Verwendung von GORM darauf achten müssen, unterstützte Datentypen zu verwenden und sicherzustellen, dass das Datenschema korrekt ist, um potenzielle Probleme zu vermeiden. Obwohl GORM leistungsstark ist, erfordern diese Einschränkungen von Entwicklern, bei der Verwendung vorsichtig damit umzugehen.
gorm v1.25.1, ich versuche es in worker
、poster
和 job
模型上运行 db.automigrate()
,但遇到 [错误] 不支持的数据类型:&[]
。 worker 和 job 结构应该具有 many-to-many 关系
,而 poster 和 job 应该具有 one-to-many
关系。工人和经验、工人和偏好都应该是 one-to-many
Beziehung. Bitte helfen Sie.
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"` }
Ich konnte mit dem folgenden Code erreichen, was Sie brauchen.
Bitte beachten Sie, dass ich zu Demonstrationszwecken Ihr Modell (Struktur) vereinfacht habe, indem ich nur die relevanten Felder der Assoziation einbeziehe. Wenn ich etwas Erwähnenswertes übersehen habe, fragen Sie einfach nach und ich werde meine Antwort aktualisieren.
Ich werde zuerst den Code teilen und ihn dann im Detail erklären.
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{}) }
Da Ihre Frage beide many2many
和 one2many
Zusammenhänge betrifft, teile ich meine Antwort in zwei Teile.
many2many
Beziehung Um diese Beziehung zu implementieren, müssen Sie eine Anmerkung gorm:"many2many:workers_posters;joinforeignkey:workersid"
neben dem Slice hinzufügen, der die zugehörige Entität enthält. Betroffene Felder sind:
posters
结构体中的 worker
Feldworkers
结构体中的 poster
FeldNatürlich müssen Sie den Wert von joinforeignkey
abhängig vom Feld ändern, das Sie festlegen möchten.
one2many
Beziehung Diese Beziehung ist sogar noch einfacher, da Sie keine Join-Tabelle angeben müssen, die in der many2many
关联中创建的联接表(例如上面创建的 workers_posters
-Zuordnung erstellt werden muss (wie die oben erstellte workers_posters
-Tabelle). Hier müssen Sie nur diese beiden Änderungen vornehmen:
poster
结构中添加 jobs []job
Feldjob
结构中添加 posterid uint
FeldWenn Sie also die automigrate
-Methode ausführen, sehen Sie die richtige Tabelle in der Datenbank und alle Fremdschlüssel sind korrekt eingestellt.
Bitte sag es mir, danke!
Das obige ist der detaillierte Inhalt vonGORM nicht unterstützte Datentypen: &, falsches Schema. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!