我整天都在撞我的脸。似乎并不复杂,但显然我缺少一些基本知识。我正在尝试将一个用户表和一个角色表相关联,其中一个用户可能有很多角色,许多用户可能都有每个角色。我一直在使用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上找到的东西。我快疯了,请帮忙!