在bookshelf.js中手动设置时间戳值

时间:2015-07-25 07:23:05

标签: javascript node.js bookshelf.js knex.js

我设置了一个表,以便将时间戳和书架配置为使用它们。通常一切都按照应有的方式发生,书架会处理时间戳,但我有一个案例需要指定它们,但是当我尝试这样做时,会忽略这些值并使用当前日期。

我已经尝试将我的用例简化为基本要素:

var Author = Bookshelf.Model.extend({
  tableName: 'authors',
  hasTimestamps: ['created_at', 'updated_at'],

  bookAuthors: function(){
    return this.hasMany(require('.book_authors'));
  },

  associateBookWithAuthor(bookId,timestamp) {
    return self.related('bookAuthors').create({
      book_id: bookId,
      updated_at: timestamp, // ignored by bookshelf
      created_at: timestamp  // also ignored
    })
  }
}

我仍然希望为常规用例配置hasTimestamps。是否有可能让Bookshelf让我覆盖时间戳行为?

2 个答案:

答案 0 :(得分:5)

查看Bookshelf源后,created_at和updated_at会根据需要在create / insert上设置,并且永远不会从您传入的模型中读取:https://github.com/tgriesser/bookshelf/blob/c83ada77d5c670a773c0b47c604b452cd0e03e86/src/base/model.js#L413

这使我的目标无法实现。反思这似乎是一个好主意,不要重载这些列,并为我试图存储的日期创建另一列。

答案 1 :(得分:1)

只需为新访客更新此问题的正确答案即可。最新的书架允许覆盖时间戳值。

在此处查看官方文档和示例

https://bookshelfjs.org/api.html#Model-instance-hasTimestamps

iLike