【问题标题】:Bookshelf.js set attribute not in databaseBookshelf.js 设置属性不在数据库中
【发布时间】:2015-04-03 03:21:37
【问题描述】:

我有一个 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"

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

感谢任何帮助或见解!

【问题讨论】:

    标签: javascript node.js bookshelf.js


    【解决方案1】:

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

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

    每个数据库映射器都有它们,但是当您不知道它们叫什么时,很难通过谷歌搜索解决方案。

    【讨论】:

    • 天哪,谢谢!这正是我所需要的。你是对的,我可能永远不会在不知道它们叫什么的情况下找到它。
    猜你喜欢
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    相关资源
    最近更新 更多