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

Posted

技术标签:

【中文标题】如何在 node.js 中使用 sequelize-npm 实现与连接表的一对多关系【英文标题】:How to implement one-to-many relationship with join table using sequelize-npm in node.js 【发布时间】:2016-01-28 09:59:59 【问题描述】:

我正在 node.js 中编写 REST API,并将其作为 mysql ORM。我知道,如何使用 sequelize 关联来实现 2 个表之间的 n:m 关系。这在 sequelize 的官方文档中有很好的定义here。

我想使用连接表实现一对多关系。

我的实现方法:

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 会创建外键 childChildId ? 它会完美运行吗?

【问题讨论】:

【参考方案1】:

在 parent.model.js 你应该写

Parent.hasMany

而不是

Parent.belongsToMany

如果你写“belongsToMany”,它实际上会创建 n:m 关系,如这里 http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/ 中所述

编辑:这是 "hasMany" 的文档: http://docs.sequelizejs.com/en/latest/api/associations/has-many/

【讨论】:

我想使用第三个表进行一对多关联。 hasMany 用于建立没有连接表的 1:m 关联

以上是关于如何在 node.js 中使用 sequelize-npm 实现与连接表的一对多关系的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在 Sequelize 中创建一个表以使用 Node JS 存储在 Postgresql 中

Node.js - 如何使用 Sequelize 交易

如何使用node.js控制sequelize中的内连接查询?

如何使用 Sequelize 和 node.js 进行批量插入

Node.js / Sequelize.js / Express.js - 如何插入多对多关联? (同步/异步?)