我已将idAttribute行添加到此代码中,希望它允许我为我的id字段指定备用名称:
bookshelf.ApiUser = Bookshelf.Model.extend({
tableName: 'users',
idAttribute: 'userID'
});
但它破坏了我的节点项目。只要我的id字段被命名为'id',项目就可以工作;如何命名id字段userID并让bookshelfjs知道该怎么做?
答案 0 :(得分:2)
idAttribute的值必须是表中的列。它的目的是告诉书架哪个列应该用作伪造和关系之类的id字段。您无法通过在其中指定其他名称来更改字段的名称。我知道如何更改模型中字段名称的唯一方法是更改实际列名称
-----更新----
并非有人关心,但您可以通过使用虚拟和隐藏插件隐藏实际的id属性并提供具有不同名称的虚拟属性来解决此问题。
首先包含插件
var bookshelf = require('bookshelf');
bookshelf.plugin('virtuals');
bookshelf.plugin('visibility');
然后定义你的模型,id属性为hidden,虚拟属性为get / set id属性
bookshelf.ApiUser = Bookshelf.Model.extend({
tableName: 'users',
hidden: ['id'],
virtuals: {
userID: {
get: function() {
return this.get('id');
},
set: function(value) {
return this.set('id', value);
}
}
}
});
您仍然需要名为' id'的id字段在数据库中。或者您只需将数据库中的主键重命名为userID。