我已将 idAttribute 行添加到此代码中,希望它允许我为我的 id 字段指定一个备用名称:
bookshelf.ApiUser = Bookshelf.Model.extend({
tableName: 'users',
idAttribute: 'userID'
});
但它破坏了我的 Node 项目。只要我的 id 字段被命名为“id”,项目就可以工作;我如何命名 id 字段 userID 并让 bookshelfjs 知道该做什么?
最佳答案
idAttribute 的值需要是表中的一列。它的目的是告诉 bookshelf 它应该使用哪一列作为 id 字段,比如 forge 和 relations。您不能通过在此处指定不同的名称来更改字段的名称。我知道如何更改模型中的字段名称的唯一方法是更改实际的列名称
-----更新----
虽然没有人关心,但您可以通过使用虚拟插件和隐藏插件来隐藏实际的 id 属性并提供具有不同名称的虚拟插件来解决此问题。
首先包含插件
var bookshelf = require('bookshelf');
bookshelf.plugin('virtuals');
bookshelf.plugin('visibility');
然后使用隐藏的 id 属性和用于获取/设置 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。
关于mysql - 书架JS : idAttribute to specify alternate id name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23962840/