Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 续集:用“问题”;“属于造口”;(多对多协会)_Javascript_Node.js_Sequelize.js_Es6 Class - Fatal编程技术网

Javascript 续集:用“问题”;“属于造口”;(多对多协会)

Javascript 续集:用“问题”;“属于造口”;(多对多协会),javascript,node.js,sequelize.js,es6-class,Javascript,Node.js,Sequelize.js,Es6 Class,我正试图在Sequelize(和Postgres)中使用belongTomany方法建立多对多关联,但我面临一些问题。该场景非常常见,围绕三个表展开:t\u用户(model nameUser)、t\u角色(model nameRole)及其链接表t\u用户(model nameUserRole) 值得一提的是,包括链接表在内的所有表都是以前使用创建的(如有必要,我可以提供迁移代码) 在解释问题之前,涉及的文件包括: 用户模型 类用户扩展Sequelize.Model{ 建造师(道具){ 超级(

我正试图在Sequelize(和
Postgres
)中使用
belongTomany
方法建立多对多关联,但我面临一些问题。该场景非常常见,围绕三个表展开:
t\u用户
(model name
User
)、
t\u角色
(model name
Role
)及其链接表
t\u用户
(model name
UserRole

值得一提的是,包括链接表在内的所有表都是以前使用创建的(如有必要,我可以提供迁移代码)

在解释问题之前,涉及的文件包括:

用户模型


类用户扩展Sequelize.Model{
建造师(道具){
超级(道具);
}
}
常量dbUser={
a_id:{
primaryKey:没错,
自动递增:真,
类型:Sequelize.BIGINT,
},
创建的日期:{
类型:Sequelize.DATE,
allowNull:错,
},
第一个名字:{
类型:Sequelize.STRING,
allowNull:错,
},
姓氏:{
类型:Sequelize.STRING,
allowNull:错,
},
电子邮件:{
类型:Sequelize.TEXT,
独一无二:没错,
allowNull:错,
},
密码:{
类型:Sequelize.STRING,
allowNull:错,
},
生日:{
类型:Sequelize.DATE,
allowNull:错,
},
a\u处于活动状态:{
类型:Sequelize.BOOLEAN,
allowNull:错,
},
};
init(dbUser{
sequelize:db,//db保存sequelize连接实例
modelName:'t_user',
时间戳:false,
tableName:'t_users',
});
User.associate=(型号)=>{
User.belongTomany(models.Role{
通过:{model:UserRole,unique:false},
作为‘角色’,
foreignKey:“一个用户”,
otherKey:“a_角色”,
});
};
榜样


类角色扩展了Sequelize.Model{
建造师(道具){
超级(道具);
}
}
常量dbRole={
a_id:{
primaryKey:没错,
自动递增:真,
类型:Sequelize.BIGINT,
},
a_角色:{
类型:Sequelize.STRING,
allowNull:错,
},
};
Role.init(dbRole{
续集:db,
型号名称:“t_角色”,
时间戳:false,
tableName:“t_角色”,
});
Role.associate=(模型)=>{
角色归属(models.User、{
通过:{model:UserRole,unique:false},
as:'UserOfRoles',
外键:“a_角色”,
otherKey:'一个用户',
});
};
用户角色

类用户角色扩展Sequelize.Model{
建造师(道具){
超级(道具);
}
}
常量dbUserRole={
a_id:{
primaryKey:没错,
自动递增:真,
类型:Sequelize.BIGINT,
},
a_角色:{
类型:Sequelize.BIGINT,
allowNull:错,
primaryKey:false,
参考资料:{
模式:角色,
关键字:“a_id”,
},
onDelete:'级联',
},
用户:{
类型:Sequelize.BIGINT,
allowNull:错,
参考资料:{
型号:用户,
关键字:“a_id”,
},
onDelete:'级联',
},
};
init(dbUserRole{
续集:db,
modelName:'t_user_role',
时间戳:false,
tableName:'t_user_role',
});
我的模型
index.js

型号

从“/User”导入用户;
从“/UserRole”导入UserRole;
从“./Role”导入角色;
常数模型={
用户,
角色
用户角色,
};
Object.keys(models).forEach((modelName)=>{
如果(模型[modelName].associate){
模型[modelName]。关联(模型);
}
});
导出默认模型;
话虽如此,现在是问题所在。

我试图查询
User
表并检索一个用户,使用
include
,还检索与该用户关联的
角色。但由于某些原因,我得到的所有结果都没有用户的角色

我正在使用的查询


const result=await User.findAll({
其中:{
a_id:1,//为了简单起见
},
包括:[
{
model:models.Role,//角色模型类
作为‘角色’,
属性:['a_role'],
通过:{
属性:[],
},
},
],
});
此查询返回以下解析为JSON的对象(即使我不解析它,普通sequelize响应对象中也不存在
roles
键):

[
{
“a_id”:1,
“创建日期”:“2020-05-24T00:00:00.000Z”,
“a_first_name”:“Thiago”,
“姓”:“莫雷拉”,
“电子邮件”:thiago@mail.com",
“密码”:“加密的东西”,
“a_生日”:“1991-09-04T00:00:00.000Z”,
“a_处于活动状态”:真
}
]
对输出进行续集的查询

选择“t_用户”、“a_id”,
“用户”,“创建日期”,
“t_user”“a_first_name”,
“t_用户”“a_姓氏”,
“t_用户”“a_电子邮件”,
“t_用户”“a_密码”,
“t_用户”“a_生日”,
“t_用户”“a_处于活动状态”,
“角色”。“a_id”作为“角色a_id”,
“角色”。“a_角色”为“角色。a_角色”,
“角色->t_用户角色”“a_id”为“角色.t_用户角色.a_id”,
“角色->t_用户角色”“a_角色”为“角色.t_用户角色.a_角色”,
“角色->t_用户角色”“a_用户”作为“角色.t_用户角色.a_用户”
从“t_用户”变为“t_用户”
左外部联接(“t\u用户\u角色”为“角色->t\u用户\u角色”
将“t\U角色”内部联接为“角色”上的“角色”。“a\U id”=“角色->t\U用户\U角色”。“a\U角色”
)
在“t_用户”上,“a_id”=“角色->t_用户角色”“a_用户”;
(这是
原始查询
,在
Postgres
中使用时效果良好)

根据我在互联网上的阅读资料,
findAll
方法,如果提供了一个
include
,也应该能够返回关联的数据。为了让一切变得更奇怪,我可以在两种情况下检索用户的角色(但如果我正确理解文档,这些“变通办法”不应是必要的)

第一个场景

const result=wait User.findAll({
其中:{
身份证