提问者:小点点

sequelize include,连接两个关联的表


我有两个模型赋值和区域,每个都定义在单独的文件中,如下所示:

./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",
        });
    };

当我试图用包含属性的区域信息(join)找到一些赋值时,我得到了一个错误,说:区域不关联到赋值!


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

提前谢谢你。


共2个答案

匿名用户

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

所以列areaId应该在中。但在模型中看不到它。

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

null

总之,您错过了模型中的列。

匿名用户

在我看来,您似乎缺少了附带的associate方法:

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

null