mysql - 书架JS : idAttribute to specify alternate id name

标签 mysql node.js bookshelf.js

我已将 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/

相关文章:

mysql - 如何在Sybase SQL Anywhere 中模拟MySQL 的bit_count 函数?

基于最终排序索引的具有多个键的 JavaScript 复杂排序

node.js - 为什么 "Unexpected token ."上的 "import.meta.url"linting 失败?

mysql - 问 :Bookshelf. js :How to query by bookshelfjs?

php - 无法访问序列化数据

php - 查询未插入数据没有错误

PHP for 循环 - 在表中显示数据

node.js - 在 'grunt' 上。它应该自动打开浏览器,网址为 'http://127.0.0.1:3000/'

node.js - 销毁书架/knex连接池

node.js - 解决 NodeJS 模型中的循环依赖