Gorm: Problem mit Aufzählungstypen

Erstellt am 26. Nov. 2014  ·  3Kommentare  ·  Quelle: go-gorm/gorm

Ich habe folgendes:

type BufferType string
const (
    Console BufferType = "console"
    Channel BufferType = "channel"
    Conversation BufferType = "conversation"
)

type Buffer struct {
    Bid  int64  `gorm:"primary_key:yes"`
    Type BufferType `sql:"not null;type:ENUM('console', 'channel', 'conversation')"`
    Name string `sql:"size:255;not null"`
}

Wenn ich db.Save(buffer) versuche, erhalte ich die folgende Fehlermeldung:
sql: converting Exec argument #1's type: unsupported type BufferType, a string)

Wäre es möglich, aufzulösen, dass BufferType wirklich nur eine Zeichenfolge ist, und zu speichern? Ich erhalte ähnliche Fehler, wenn ich versuche, diese Struktur mit db.Find() zu laden.

Hilfreichster Kommentar

Ich hatte das gleiche Problem. Die Lösung von @bramp hat mir trotzdem einen Fehler gegeben. Bei mir hat folgendes funktioniert:

func (u *BufferType) Scan(value interface{}) error { *u = BufferType(value.([]byte)); return nil }
func (u BufferType) Value() (driver.Value, error)  { return string(u), nil }

Der Unterschied besteht darin, []byte anstelle von string . Dieser Stackoverflow-Thread hat mir geholfen: http://stackoverflow.com/a/20582504/2418739

Alle 3 Kommentare

Nach einigem weiteren Debuggen scheint dieser Fehler aus der Golang-Datenbank/dem SQL-Code zu kommen, und ich habe hier eine Lösung gefunden . Ich musste nur hinzufügen:

func (u *BufferType) Scan(value interface{}) error { *u = BufferType(value.(string)); return nil }
func (u BufferType) Value() (driver.Value, error)  { return string(u), nil }

Es ist ein bisschen klobig, aber es hilft der Datenbank, richtig zuzuordnen. Ich könnte hier auch die Fehlerüberprüfung hinzufügen, wenn ich sie brauche.

Ich hatte das gleiche Problem. Die Lösung von @bramp hat mir trotzdem einen Fehler gegeben. Bei mir hat folgendes funktioniert:

func (u *BufferType) Scan(value interface{}) error { *u = BufferType(value.([]byte)); return nil }
func (u BufferType) Value() (driver.Value, error)  { return string(u), nil }

Der Unterschied besteht darin, []byte anstelle von string . Dieser Stackoverflow-Thread hat mir geholfen: http://stackoverflow.com/a/20582504/2418739

+1 tolle Lösung. Ich wünschte, das wäre in den GORM-Dokumenten.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen