如何在 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中的内连接查询?