2016-12-18 3 views
0

Я пытаюсь выполнить операцию insert с помощью orm в go.Ошибка NULL сбой в go orm

Я вставить и не присвоить значение значения типа времени, как поле:

ReplyTime  time.Time `orm:"index"` 

он будет бросать ошибку: NOT NULL constraint failed: topic.reply_time.

Итак, как я могу установить для этого значения значение NULL или значение по умолчанию?

type Topic struct { 
    Id    int64 
    UId    int64 
    Title   string 
    Content   string `orm:"size(5000)"` 
    Attachment  string 
    Created   time.Time `orm:"index"` 
    Updated   time.Time `orm:"index"` 
    Views   int64 `orm:"index"` 
    Author   string 
    ReplyTime  time.Time `orm:"index"` 
    ReplyCount  int64 
    ReplyLastUserId int64 
} 

func AddTopic(title, content string) error { 
    o := orm.NewOrm() 
    t := time.Now() 

    topic := &Topic{Title:title, Content:content, Created:t, Updated:t} 
    _, err := o.Insert(topic) 
    return err 
} 

ответ

0

So how can I set this value to be nullable or a default value?

Вы можете:

  1. Удалите not null ограничение из базы данных и изменить тип на то, что принимает нулевые значения. Go включает в себя несколько из них в стандартной библиотеке (например, sql.Null*), но не имеет одного для time.Time. Напишите свой собственный или используйте что-то вроде github.com/guregu/null, которое добавляет поддержку для этого.
  2. Перед тем, как вставить его в базу данных, обязательно установите поле ReplyTime.

«Лучшее» решение будет зависеть от вашего приложения и того, что означают эти данные. Должно ли логически возможно, чтобы ReplyTime имел «нет значения» (например, пользователь никогда не отвечал)? Если это так, используйте опцию 1. Если она всегда должна иметь значение, используйте опцию 2.

+0

благодарит за вашу помощь. Я запутался в типе «времени», поддерживает ли он значение NULL или просто потому, что я добавляю этот индекс «orm:» «» к значению. – machinezhou