bookshelfJS:idAttribute指定备用ID名称

时间:2014-05-30 20:23:04

标签: mysql node.js bookshelf.js

我已将idAttribute行添加到此代码中,希望它允许我为我的id字段指定备用名称:

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

但它破坏了我的节点项目。只要我的id字段被命名为'id',项目就可以工作;如何命名id字段userID并让bookshelfjs知道该怎么做?

1 个答案:

答案 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。