Maison > développement back-end > Golang > Champs de structure non valides trouvés lors de la migration automatique

Champs de structure non valides trouvés lors de la migration automatique

WBOY
Libérer: 2024-02-12 17:30:06
avant
929 Les gens l'ont consulté

Champs de structure non valides trouvés lors de la migration automatique

Contenu de la question

Lorsque j'essaie de migrer automatiquement les tables en fonction de ma structure, j'obtiens cette erreur, je ne sais pas pourquoi j'obtiens cette erreur

failed to parse value &models.model{id:0x0, createdat:time.date(1,
time.january, 1, 0, 0, 0, 0, time.utc), updatedat:time.date(1,
time.january, 1, 0, 0, 0, 0, time.utc), deletedat:,
dogdata:[]models.dogdata(nil)}, got error invalid field found for
struct github.com/dog-page/models.model's field dogdata: define a
valid foreign key for relations or implement the valuer/scanner
interface
Copier après la connexion

Je suis nouveau dans le langage golang et gorm, surtout lorsqu'il s'agit de créer des structures pour les données brutes json, voici mon intention d'utiliser la structure de gorm :

type Model struct {
    ID        uint       `gorm:"primarykey:id" json:"id:_id"`
    CreatedAt time.Time  `gorm:"column:created_at" json:"created_at"`
    UpdatedAt time.Time  `gorm:"column:updated_at" json:"updated_at"`
    DeletedAt *time.Time `gorm:"column:deleted_at" json:"deleted_at"`
    DogData   []DogData
}

type DogData struct {
    DogDataID    uint
    Name         string         `json:"name"`
    Life_Span    string         `json:"life_span"`
    Temperaments string         `json:"temperament"`
    Weight       datatypes.JSON `json:"weight"`
    Height       datatypes.JSON `json:"height"`
    Image        datatypes.JSON `json:"image"`
}

type Weight struct {
    Imperial string `json:"imperial"`
    Metric   string `json:"metric"`
}

type Height struct {
    Imperial string `json:"imperial"`
    Metric   string `json:"metric"`
}

type Image struct {
    URL string `json:"url"`
}
Copier après la connexion

Solution

Champs dogdata du modèle : définir des clés étrangères valides pour les relations

Le modèle a une relation un-à-plusieurs avec dogdata, et gorm ne peut pas reconnaître les clés étrangères.

Vous devez spécifier la colonne dans dogdata 中存储 model.id (gorm recherche modelid par défaut),

type model struct {
    id        uint       `gorm:"primarykey:id" json:"id:_id"`
...
    dogdata []dogdata
}

type dogdata struct {
    modelid      uint
    dogdataid    uint
...
}
//create table `dog_data` (`model_id` integer,`dog_data_id` integer,`name` text,`life_span` text,`temperaments` text,constraint `fk_models_dog_data` foreign key (`model_id`) references `models`(`id`))
Copier après la connexion

Ou si vous souhaitez utiliser une autre colonne au lieu de spécifier la colonne à l'aide de la balise Foreignkey

type model struct {
    id        uint       `gorm:"primarykey:id" json:"id:_id"`
...
    dogdata   []dogdata  `gorm:"foreignkey:dogdataid"`

}

type dogdata struct {
    dogdataid    uint
...
}

//create table `dog_data` (`model_id` integer,`dog_data_id` integer,`name` text,`life_span` text,`temperaments` text,constraint `fk_models_dog_data` foreign key (`dog_data_id`) references `models`(`id`))
Copier après la connexion

Je ne suis pas sûr du cas d'utilisation, mais je pense dogdata 可以简化为,完全删除 model 结构,因为它与 gorm.model pareil

type DogData struct {
    gorm.Model
    Name         string         `json:"name"`
    ...
}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal