bookshelfJS:idAttribute指定替代ID名称

我已经将idAttribute行添加到此代码中,希望能够为我的id字段指定一个替代名称:

bookshelf.ApiUser = Bookshelf.Model.extend({ tableName: 'users', idAttribute: 'userID' }); 

但它打破了我的节点项目。 只要我的ID字段被命名为“ID”,该项目的工作; 我怎么能命名id字段userID并让bookshelfjs知道该怎么办?

idAttribute的值需要是表中的一列。 它的目的是告诉书架哪个列应该用作伪造和关系之类的id字段。 您不能通过指定不同的名称来更改字段的名称。 我知道如何在模型中更改字段名称的唯一方法是更改​​实际的列名称

—–更新—-

不是任何人都在意,但是你可以通过使用虚拟和隐藏的插件来隐藏实际的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。