【问题标题】:sequelize include, join two associated tablessequelize include,连接两个关联表
【发布时间】: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 }) })

提前致谢。

【问题讨论】:

    标签: node.js postgresql express sequelize.js


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多