如何获取模型的主键属性名称? (水线ORM)

时间:2014-10-18 23:39:46

标签: node.js sails.js waterline

我的一些模型没有id作为主键,我需要知道给定模型的主键名称,但我找不到这样做的方法。我搜索了waterline文档和源代码,但我在源代码中找到的所有内容都是使用attributes对象定义,该定义存储在lib范围内的一个无法访问的变量中。

我发现现在这样做的“清洁工”方式是这样的:

// 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';
  },
  //...
};

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

2 个答案:

答案 0 :(得分:0)

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

无论如何,无论谁想要相同的信息,这里都是:

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

瞧,简单!

答案 1 :(得分:0)

有许多实用程序可以帮助您解决此问题。查看sails蓝图文件,特别是actionUtils.js文件

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