sequelize include,连接两个关联表
Posted
技术标签:
【中文标题】sequelize include,连接两个关联表【英文标题】:sequelize include, join two associated tables 【发布时间】:2019-06-23 03:59:30 【问题描述】:我在单独的文件中定义了 2 个模型分配和区域,如下所示:
./models
--Area.js
--Assignment.js
--index.js
Area.js:
const Area = sequelize.define('area', ID: 类型:Sequelize.INTEGER, 自动增量:真, 主键:真 , 姓名: 类型:Sequelize.STRING, , 时间戳:假 ); Area.hasMany(Assignment, foreignKey:'areaId');Assignment.js:
const 赋值 = sequelize.define('赋值', ID: 类型:Sequelize.INTEGER, 自动增量:真, 主键:真, , 时间戳:假 ); 分配.关联 = 模型 => models.Assignment.belongsTo(models.Area, foreignKey: 'areaId', onDelete: "级联", ); ;当我尝试使用 Include 属性查找一些带有区域信息(连接)的作业时,我收到一条错误消息:area is not associated to assignment!
赋值.findAll( 包括:[模型:区域] ).then((作业) => res.status(200).json(作业) ).catch((e) => res.status(500).json( 错误: e.message ) )提前致谢。
【问题讨论】:
【参考方案1】:Area.hasMany(Assignment, foreignKey:'areaId');
所以列 areaId 应该在您的Assignment.js
中。但在您的 Assignment
模型中看不到它。
models.Assignment.belongsTo(models.Area,
foreignKey: 'areaId',
onDelete: "CASCADE",
);
只有当您的Assignment.js
中有一个名为 areaId 的列时,这才是正确的
总之,您错过了Assignment
模型中的areaId
列。
【讨论】:
该列是在我午餐脚本时自动创建的,所以当我检查数据库时,我可以看到 areaId 是自动创建并引用到 Area 表主键(id)。这就是官方文档所说的Sequelize foreign Key Docs提前致谢。 您可以停止表模型文件的同步属性,以便 Sequelize 不会删除并重新创建表。 在创建关系时还有其他选项,例如 - sourceKey 就像 foreignKey 但用于其他表 @BenAyoub 然后尝试将其添加到您的模型中并让我知道会发生什么。 (我的意思是提到模型中的列)【参考方案2】:在我看来,您缺少封闭的关联方法:
Area.associate = models =>
models.Area.hasMany(Assignment, foreignKey:'areaId')
;
areaId
列也应该在您的Assignment.js
中
【讨论】:
以上是关于sequelize include,连接两个关联表的主要内容,如果未能解决你的问题,请参考以下文章