缺少N:M关系自动生成的方法

时间:2018-10-22 02:35:57

标签: sequelize.js sequelize-cli

我整天都在撞我的脸。似乎并不复杂,但显然我缺少一些基本知识。我正在尝试将一个用户表和一个角色表相关联,其中一个用户可能有很多角色,许多用户可能都有每个角色。我一直在使用sequelize-cli,并使用以下代码:

用户模型:

'use strict';
module.exports = (sequelize, DataTypes) => {
    const user = sequelize.define('user', {
        id: {
            allowNull: false,
            primaryKey: true,
            type: DataTypes.INTEGER,
            autoIncrement: true
        },
        discord_id: {
            type: DataTypes.STRING,
        },
        createdAt: {
            type: DataTypes.DATE,
            defaultValue: sequelize.literal('NOW()')
        },
        updatedAt: {
            type: DataTypes.DATE,
            defaultValue: sequelize.literal('NOW()')
        }

    }, {});

  user.associate = function(models) {
    user.belongsToMany(models.role, {
        through: 'userrole',
        foreignKey: 'discord_id',
        otherKey: 'role_id',
        //as: "UserRoles"
    });
  };
  return user;
};

角色模型

'use strict';

module.exports = (sequelize, DataTypes) => {
  const role = sequelize.define('role', {
      id: {
          allowNull: false,
          primaryKey: true,
          type: DataTypes.INTEGER,
          autoIncrement: true
      },
      role_id: {
          type: DataTypes.STRING,
          //primaryKey: true
      },
  }, {});
  role.associate = function(models) {
      role.belongsToMany(models.user, {
          through: 'userrole',
          foreignKey: 'role_id',
          otherKey: 'discord_id',
          //as: "roleusers"
      });
  };
  return role;
};

与index.js相关的部分

const Sequelize = require('sequelize');

let models = require('../models');

async function test() {
    let user = models.user;
    const role = models.role;
    let r = role.getUsers(); //THIS DIES ON TypeError: role.getUsers is not a function
}

test();

如果我恰好在调用getUsers()之前抛出一个断点,则可以看到一个getUsers函数位于角色的原型上。但是,我无法终生获得这项服务。请注意,在可以执行role.findAll()并将[include]传递给它以捕获相关用户的意义上,我可以成功地使用该关系进行急切的加载,因此关联本身起作用。只是不是魔术方法。我已经尝试了所有可以在SO上找到的东西。我快疯了,请帮忙!

0 个答案:

没有答案