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

Manually setting timestamp values in bookshelf.js

我有一个 table 设置有时间戳和书架配置来使用它们。通常一切都会按预期发生,书架会处理时间戳,但我有一种情况想指定它们,但当我尝试这样做时,这些值将被忽略并使用当前日期。

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

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 让我覆盖时间戳行为?

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

这让我的目标无法实现。考虑到不让这些列超载并为我要存储的日期创建另一个列似乎是个好主意。

只是为这个问题的新访客更新正确答案。最新的是 bookshelf 允许覆盖时间戳值。

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

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

myModel.save({created_at: new Date(2015, 5, 2)}).then(function(updatedModel) {
  // {
  //   name: 'blah',
  //   created_at: 'Tue Jun 02 2015 00:00:00 GMT+0100 (WEST)',
  //   updated_at: 'Sun Mar 25 2018 15:07:11 GMT+0100 (WEST)'
  // }
})