如何在node.js中使用sequelize npm实现与联接表的一对多关系

如何在node.js中使用sequelize npm实现与联接表的一对多关系,node.js,orm,sequelize.js,Node.js,Orm,Sequelize.js,我正在node.js中使用sequelize作为MySQL ORM编写RESTAPI。我知道,如何使用sequelize关联实现两个表之间的n:m关系。sequelize的官方文档对此有很好的定义 我希望使用联接表实现一对多关系 我的实现方法: parent.model.js module.exports = function(sequelize, DataTypes){ var Parent = sequelize.define('parent', {

我正在node.js中使用sequelize作为MySQL ORM编写RESTAPI。我知道,如何使用sequelize关联实现两个表之间的n:m关系。sequelize的官方文档对此有很好的定义

我希望使用联接表实现一对多关系

我的实现方法:

parent.model.js

module.exports = function(sequelize, DataTypes){
    var Parent = sequelize.define('parent', {
                parent_id:{
                    type:DataTypes.INTEGER,
                    field:'parent_id',
                    primaryKey: true,
                    autoIncrement: true,
                    unique:true
                },
                parent_name:{
                    type: DataTypes.STRING,
                    field: 'parent_name'
                },
        },
        {
            classMethods:{
                associate:function(models){
                    Parent.belongsToMany(models.child, {
                        through:'parent_child_mapping',
                        foreignKey:'parent_id'
                    });
                }
            }
        }
    );
    return Parent;
}
child.model.js

module.exports = function(sequelize, DataTypes){
    var Child = sequelize.define('child', {
                child_id:{
                    type:DataTypes.INTEGER,
                    field:'child_id',
                    primaryKey: true,
                    autoIncrement: true,
                    unique:true
                },
                child_name:{
                    type: DataTypes.STRING,
                    field: 'child_name'
                },
        },
        {
            classMethods:{
                associate:function(models){
                    Child.belongsTo(models.parent, {
                        through:'parent_child_mapping',
                        foreignKey:'child_id'
                    })
                }
            }
        }
    );
    return Child;
}
同步后,新表结构如下所示:

我的问题:

  • 为什么sequelize要创建外键childId
  • 它能完美地工作吗

在parent.model.js中,您应该编写

Parent.hasMany
而不是

Parent.belongsToMany
如果你写“belongtomany”,它实际上创建了n:m关系,如这里所述

编辑:这是“hasMany”的文档:

我希望使用第三个表进行一对多关联。hasMany用于在没有联接表的情况下建立1:m关联