合并,合并两个关联表

时间:2019-01-29 23:06:08

标签: node.js postgresql express sequelize.js

我在单独的文件中分别定义了2个模型Assignment和Area:

./models
--Area.js
--Assignment.js
--index.js

Area.js:


    const Area = sequelize.define('area',{
        id: {
            type: Sequelize.INTEGER,
            autoIncrement: true,
            primaryKey: true
        },
        name: {
            type: Sequelize.STRING,
        }
        }, {
            timestamps: false
        });
     Area.hasMany(Assignment, { foreignKey:'areaId'});

Assignment.js:


    const Assignment = sequelize.define('assignment',{
        id: {
          type: Sequelize.INTEGER,
          autoIncrement: true,
          primaryKey: true,
        }
      }, {
        timestamps: false
      });
    Assignment.associate = models => {
        models.Assignment.belongsTo(models.Area, {
            foreignKey: 'areaId',
            onDelete: "CASCADE",
        });
    };

当我尝试使用 Include 属性查找一些具有区域信息(加入)的作业时,出现错误消息:区域与作业无关!


    Assignment.findAll({
            include: [{ model: Area }]
        }).then((assignments) => {
            res.status(200).json(assignments)
        }).catch((e) => {
            res.status(500).json({ error: e.message })
        })

谢谢。

2 个答案:

答案 0 :(得分:0)

Area.hasMany(Assignment, { foreignKey:'areaId'});

因此,列 areaId 应该在您的Assignment.js中。但是在您的Assignment模型中看不到它。

models.Assignment.belongsTo(models.Area, {
            foreignKey: 'areaId',
            onDelete: "CASCADE",
        });

这仅在Assignment.js

中有一个名为areaId的列时才是正确的

最后,您会错过areaId模型中的Assignment列。

答案 1 :(得分:0)

在我看来,您似乎缺少内联方法:

Area.associate = models => {
    models.Area.hasMany(Assignment, { foreignKey:'areaId'})
};

并且列areaId也应该在您的Assignment.js