Javascript Sequelise:与其他表关联的多对多表(交叉表)

Javascript Sequelise:与其他表关联的多对多表(交叉表),javascript,mysql,orm,mariadb,sequelize.js,Javascript,Mysql,Orm,Mariadb,Sequelize.js,这是我的图表数据库: 我用SEQUELIZE制作了数据库模型,如下所示: 型号:Level module.exports=(续集,数据类型)=>{ 常量级别=sequelize.define( "水平",, { 级别标识:{ 类型:DataTypes.INTEGER, primaryKey:没错, 自动递增:真, }, 标签:{ 类型:DataTypes.STRING, allowNull:错, 独特的:{ 阿格斯:没错, msg:'级别:标签已存在!', }, 验证:{ notEmpty:{m

这是我的图表数据库:

我用SEQUELIZE制作了数据库模型,如下所示:

型号:Level

module.exports=(续集,数据类型)=>{
常量级别=sequelize.define(
"水平",,
{
级别标识:{
类型:DataTypes.INTEGER,
primaryKey:没错,
自动递增:真,
},
标签:{
类型:DataTypes.STRING,
allowNull:错,
独特的:{
阿格斯:没错,
msg:'级别:标签已存在!',
},
验证:{
notEmpty:{msg:`Level:Label不能为空!`},
notNull:{msg:`Level:Label不能为NULL!`},
},
},
参考:{
类型:DataTypes.STRING,
阿洛诺:是的,
},
说明:{
类型:DataTypes.TEXT,
阿洛诺:是的,
},
},
{
tableName:“级别”,
时间戳:false,
}
);
Level.associate=(型号)=>{
等级属于气密性(模型试验、{
通过:models.testHasLevel,
外键:“级别\ id”,
otherKey:'test_id',
时间戳:false,
});
};
回报水平;
};
型号:测试:

module.exports=(续集,数据类型)=>{
常量测试=sequelize.define(
"测试",,
{
测试id:{
类型:DataTypes.INTEGER,
primaryKey:没错,
自动递增:真,
},
标签:{
类型:DataTypes.STRING,
allowNull:错,
验证:{
notEmpty:{msg:`Test:label不能为空!`},
notNull:{msg:`Test:label不能为NULL!`},
},
},
国际:{
类型:DataTypes.BOOLEAN,
defaultValue:false,
allowNull:错,
验证:{
notEmpty:{msg:`Test:isInternal不能为空!`},
notNull:{msg:`Test:isInternal不能为NULL!`},
},
},
家长id:{
类型:DataTypes.INTEGER,
defaultValue:null,
阿洛诺:是的,
},
},
{
tableName:'测试',
时间戳:false,
}
);
Test.associate=(模型)=>{
试验属于气密性(模型级、{
通过:models.testHasLevel,
外键:“测试id”,
otherKey:'level_id',
时间戳:false,
});
hasMany(models.Test,{foreignKey:'parent_id',as:'children'});
};
回归试验;
};
模型:测试有模型

module.exports=(续集,数据类型)=>{
const testHasLevel=sequelize.define(
“testHasLevel”,
{},
{
身份证:{
类型:DataTypes.INTEGER,
primaryKey:没错,
自动递增:真,
},
tableName:“测试\u具有\u级别”,
时间戳:false,
}
);
testHasLevel.associate=(模型)=>{
testHasLevel.belongsTo(models.Test、{
外键:“测试id”,
targetKey:“测试id”,
});
testHasLevel.belongsTo(models.Level{
外键:“级别\ id”,
targetKey:'level_id',
});
};
返回testHasLevel;
};
我还制作了会话模型:

module.exports=(续集,数据类型)=>{
const Session=sequelize.define(
“会议”,
{
会话id:{
类型:DataTypes.INTEGER,
primaryKey:没错,
自动递增:真,
},
机构编号:{
类型:DataTypes.INTEGER,
},
开始:{
类型:DataTypes.DATE,
},
完:{
类型:DataTypes.DATE,
},
测试id:{
类型:DataTypes.INTEGER,
},
级别标识:{
类型:DataTypes.INTEGER,
},
limitDateSubscribe:{
类型:DataTypes.DATE,
},
地点:{
类型:DataTypes.INTEGER,
},
},
{
tableName:“会话”,
时间戳:false,
}
);
Session.associate=(型号)=>{
hasMany(models.sessionHasUser,{foreignKey:'Session_id'});
};
返回会议;
};
但我不知道如何将
会话
TEST\u级别
与Sequelize“绑定”。。。。 我应该换什么?因为我知道最新版本的sequelize不允许使用“复合密钥”

换句话说: 如何将交叉表与其他表的一对多关系正确关联?

模型:级别

module.exports=(续集,数据类型)=>{
常量级别=sequelize.define(
“级别”,
{
级别标识:{
类型:DataTypes.INTEGER,
primaryKey:没错,
自动递增:真,
},
标签:{
类型:DataTypes.STRING,
allowNull:错,
独特的:{
阿格斯:没错,
msg:“级别:标签已存在!”,
},
验证:{
notEmpty:{msg:`Level:Label不能为空!`},
notNull:{msg:`Level:Label不能为NULL!`},
},
},
参考:{
类型:DataTypes.STRING,
阿洛诺:是的,
},
说明:{
类型:DataTypes.TEXT,
阿洛诺:是的,
},
},
{
表名:“级别”,
时间戳:false,
}
);
Level.associate=(型号)=>{
Level.hasMany(models.testHasLevel{
外键:“级别\级别\ id”,
作为:“级别”,
});
};
回报水平;
};
模型:测试

module.exports=(续集,数据类型)=>{
常量测试=sequelize.define(
“测试”,
{
测试id:{
类型:DataTypes.INTEGER,
primaryKey:没错,
自动递增:真,
},
标签:{
类型:DataTypes.STRING,
allowNull:错,
验证:{
notEmpty:{msg:`Test:label不能为空!`},
notNull:{msg:`Test:label不能为NULL!`},
},
},
国际:{
类型:DataTypes.BOOLEAN,
defaultValue:false,
allowNull:错,
验证:{
notEmpty:{msg:`Test:isInternal不能为空!`},
notNull:{msg:`Test:isInt