2014-10-18 97 views
1

我的一些模型没有id作为主键,我需要知道给定模型的主键的名称,但我找不到这样做的方法。我搜索了waterline文档和源代码,但是我在源代码中找到的所有内容都是使用attributes对象定义,该定义存储在lib作用域中的不可访问变量中。如何获取模型的主键属性名称? (水线ORM)

“清洁工”办法,我发现做到这一点,现在是这样的:

// file: api/libs/model.js 
module.exports = { 
    //... 
    primaryKeyName: function (modelName) { 
    var key, attr, pk, 
     def = require('../models/' + modelName).attributes; 
    for (var key in def.attributes) { 
     attr = def.attributes[key]; 
     if (attr && attr.primaryKey) { 
     pk = key; 
     break; 
     } 
    } 
    return pk || 'id'; 
    }, 
    //... 
}; 

,但我觉得这是一个有点棘手,我想知道如果有不会是一个更好的解决方案在模型或模型实例(即记录)上带有一些隐藏/未记录的辅助函数或方法...

回答

0

啊!我应该从控制台检查模型类,我会有我的答案。

无论如何,谁将会寻找同样的信息,那就是:

SomeModel.primaryKey; // => 'id' or whatever it is 

瞧,就这么简单!

+0

你可以发布一个详细的例子。 – 2017-12-27 04:25:41

0

有一些实用程序可以帮助你做到这一点。退房帆蓝图文件,并专门actionUtils.js文件

API \ node_modules \帆\ LIB \吊钩\蓝图

+0

是的,我已经检查了这些文件,没有给我**模型类/名称**的模型的**主键名**。它可以从请求中读取pk **值**,也可以再次使用请求获取模型名称,从不使用**模型类/名称**。 – Huafu 2014-10-19 19:24:08