Heim  >  Artikel  >  Backend-Entwicklung  >  Bei der automatischen Migration wurden ungültige Strukturfelder gefunden

Bei der automatischen Migration wurden ungültige Strukturfelder gefunden

WBOY
WBOYnach vorne
2024-02-12 17:30:06887Durchsuche

Bei der automatischen Migration wurden ungültige Strukturfelder gefunden

Frageninhalt

Wenn ich versuche, Tabellen basierend auf meiner Struktur automatisch zu migrieren, erhalte ich diese Fehlermeldung. Ich weiß nicht, warum ich diese Fehlermeldung erhalte

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

Ich bin neu in der Golang-Sprache und in Gorm, insbesondere wenn es um die Erstellung von Strukturen für JSON-Rohdaten geht. Hier ist meine Absicht, die Struktur von Gorm zu verwenden:

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

Lösung

Modellfelder dogdata: Gültige Fremdschlüssel für Beziehungen definieren

Das Modell hat eine „Eins-zu-viele“-Beziehung mit Dogdata und Gorm kann Fremdschlüssel nicht erkennen. Sie müssen die Spalte in

angeben (gorm sucht standardmäßig nach modelid),

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`))
dogdata 中存储 model.id Oder wenn Sie eine andere Spalte verwenden möchten, anstatt die Spalte mit dem Foreignkey-Tag anzugeben

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

Ich bin mir über den Anwendungsfall nicht sicher, aber ich denke

das Gleiche

type DogData struct {
    gorm.Model
    Name         string         `json:"name"`
    ...
}

Das obige ist der detaillierte Inhalt vonBei der automatischen Migration wurden ungültige Strukturfelder gefunden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen