我有一个Bookshelf.js模型。我希望能够为该模型设置和获取在数据库中不持久的属性。

例如,假设我有一个看起来像这样的模型:

var Domain = bookshelf.Model.extend({
      tableName: 'domains',
      initialize: function() {
        this.on('creating', this.setDomainName);
      },
      setDomainName: function() {
        this.set('name', getDomainFromUrl(this.url));
      }
    });

使用如下所示的架构:
knex.schema.createTable('domains', function (table) {
    table.increments().index();
    table.text('name').index();
    table.timestamps();
  });

我希望能够保存一个称为url的属性,然后稍后在保存之前将url解析到域中。

当我尝试这样的事情:
new Domain({url: 'http://someurl.com/foo/bar'}).save()

我收到错误消息:
"column \"url\" of relation \"domains\" does not exist"

我看了看。我找不到任何将非持久属性添加到bookhelf.js模型的方法。我也找不到有关将自定义getter和setter方法添加到bookhelf.js模型的任何信息。

任何帮助或见解表示赞赏!

最佳答案

在我的手机上,请原谅我的简短回复,但您想要的是“虚拟”或“复合”字段。

https://github.com/tgriesser/bookshelf/wiki/Plugin:-Virtuals

每个数据库映射器都有它们,但是当您不知道它们的名字时,谷歌找到一个解决方案是很困难的。

07-24 09:51
查看更多