go NULL中的NOT NULL约束失败

时间:2016-12-18 04:04:49

标签: go orm

我试图用go中的orm执行操作插入。

我插入并没有为时间类型值赋值,如字段:

ReplyTime       time.Time `orm:"index"`

它会抛出错误:NOT NULL constraint failed: topic.reply_time

那么如何将此值设置为可空或默认值?

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
}

1 个答案:

答案 0 :(得分:0)

  

那么如何将此值设置为可空或默认值?

你可以:

  1. 从数据库中删除not null约束,并将类型更改为接受空值的内容。 Go包含标准库中的一些(例如sql.Null*),但time.Time没有。自己编写或使用类似github.com/guregu/null的内容,这会增加对此的支持。
  2. 确保在将ReplyTime字段插入数据库之前始终设置该字段。
  3. " best"解决方案取决于您的应用程序以及此数据表示的内容。 ReplyTime在逻辑上是否可以拥有"没有价值" (例如用户从未回复过)?如果是,则使用选项1.如果它应始终具有值,则使用选项2.