Gorm: مشكلة الأنواع المعددة

تم إنشاؤها على ٢٦ نوفمبر ٢٠١٤  ·  3تعليقات  ·  مصدر: go-gorm/gorm

لدي ما يلي:

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

عندما أحاول db.Save (المخزن المؤقت) ، أحصل على الخطأ التالي:
sql: converting Exec argument #1's type: unsupported type BufferType, a string)

هل سيكون من الممكن حل أن BufferType هو في الحقيقة مجرد سلسلة ، وحفظها؟ أحصل على أخطاء مماثلة إذا حاولت تحميل هذا الهيكل بـ db.Find ()

التعليق الأكثر فائدة

كان لي نفس القضية. لا يزال حل bramp يعطيني خطأ. عملت ما يلي بالنسبة لي:

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

الفرق هو استخدام []byte بدلاً من string . ساعدني مؤشر ترابط stackoverflow: http://stackoverflow.com/a/20582504/2418739

ال 3 كومينتر

بعد المزيد من التصحيح ، يبدو أن هذا الخطأ يخرج من كود SQL / قاعدة بيانات golang ، ووجدت حلاً هنا . أنا فقط بحاجة لإضافة:

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

إنه عتيق بعض الشيء ، لكنه يساعد قاعدة البيانات على معرفة كيفية التعيين بشكل صحيح. يمكنني أيضًا إضافة تدقيق الأخطاء هنا إذا كنت بحاجة إليه.

كان لي نفس القضية. لا يزال حل bramp يعطيني خطأ. عملت ما يلي بالنسبة لي:

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

الفرق هو استخدام []byte بدلاً من string . ساعدني مؤشر ترابط stackoverflow: http://stackoverflow.com/a/20582504/2418739

+1 حل رائع. أتمنى أن يكون هذا في مستندات GORM.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات