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