Maison  >  Article  >  développement back-end  >  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
WBOYavant
2024-02-12 17:30:06887parcourir

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

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"`
}

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`))

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`))

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"`
    ...
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer