Selon l'introduction de l'éditeur PHP Banana, GORM est une bibliothèque ORM en langage Go populaire, qui fournit des méthodes pratiques de fonctionnement de base de données. Cependant, GORM ne prend pas en charge tous les types de données et des schémas incorrects peuvent survenir lors de la gestion de certains types de données. Cela signifie que lors de l'utilisation de GORM, les développeurs doivent faire attention à l'utilisation des types de données pris en charge et s'assurer que le schéma de données est correct pour éviter des problèmes potentiels. Bien que GORM soit puissant, ces limitations obligent les développeurs à le manipuler avec prudence lors de son utilisation.
gorm v1.25.1, j'essaye en worker
、poster
和 job
模型上运行 db.automigrate()
,但遇到 [错误] 不支持的数据类型:&[]
。 worker 和 job 结构应该具有 many-to-many 关系
,而 poster 和 job 应该具有 one-to-many
关系。工人和经验、工人和偏好都应该是 one-to-many
relation. s'il vous plaît, aidez-moi.
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"` }
J'ai pu obtenir ce dont vous avez besoin avec le code suivant.
Veuillez noter que par souci de démonstration, j'ai simplifié votre modèle (structure) en incluant uniquement les champs pertinents de l'association. Si j'ai raté quelque chose qui mérite d'être mentionné, n'hésitez pas à demander et je mettrai à jour ma réponse.
Je partagerai d'abord le code, puis je l'expliquerai en détail.
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{}) }
Puisque votre question touche aux deux many2many
和 one2many
relations, je diviserai ma réponse en deux parties.
many2many
Relation Pour mettre en œuvre cette relation, vous devez ajouter une annotation gorm:"many2many:workers_posters;joinforeignkey:workersid"
à côté de la tranche qui contient l'entité associée. Les champs concernés sont :
posters
结构体中的 worker
Terrainworkers
结构体中的 poster
TerrainVous devez évidemment modifier la valeur de joinforeignkey
en fonction du champ que vous souhaitez définir.
one2many
Relation Cette relation est encore plus simple car vous n'avez pas besoin de spécifier une table de jointure (telle que la table workers_posters
créée ci-dessus) qui doit être créée dans l'association many2many
关联中创建的联接表(例如上面创建的 workers_posters
. Ici, il vous suffit d'effectuer ces deux modifications :
poster
结构中添加 jobs []job
terrainjob
结构中添加 posterid uint
terrainDonc, si vous exécutez la méthode automigrate
, vous verrez la table correcte dans la base de données et toutes les clés étrangères définies correctement.
S'il vous plaît, dites-moi, merci !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!