Автоматически сгенерированные методы отношения N: M отсутствуют - PullRequest
0 голосов
/ 22 октября 2018

Я весь день бился с этим по лицу.Это не кажется сложным, но, видимо, мне не хватает чего-то простого.Я пытаюсь связать таблицу пользователей и таблицу ролей, где у пользователя может быть много ролей, и у многих пользователей может быть каждая роль.Я использовал 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.Я схожу с ума, пожалуйста, помогите!

...