Bookshelf.js 设置属性不在数据库中
Bookshelf.js set attribute not in database
我有一个 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 方法的信息。
感谢任何帮助或见解!
关于我的phone,所以请原谅简短的回复,但你想要的是所谓的'virtual'或'composite'字段。
https://github.com/tgriesser/bookshelf/wiki/Plugin:-Virtuals
每个数据库映射器都有它们,但是当您不知道它们叫什么时,就很难google找到解决方案。
我有一个 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 方法的信息。
感谢任何帮助或见解!
关于我的phone,所以请原谅简短的回复,但你想要的是所谓的'virtual'或'composite'字段。
https://github.com/tgriesser/bookshelf/wiki/Plugin:-Virtuals
每个数据库映射器都有它们,但是当您不知道它们叫什么时,就很难google找到解决方案。