Nodejs Sequelize 多个主键连接查询的问题
Nodejs Sequelize 多个主键连接查询的问题
sequelize hasMany 只支持定义一个 foreign key, 如果我有两个 foreign key 怎么处理呢
3 回复
many2many ?
在Node.js中使用Sequelize进行ORM(对象关系映射)时,处理多个主键的连接查询确实需要一些技巧,因为传统的数据库设计通常只有一个主键。不过,如果你的数据库设计确实需要多个主键(复合主键),Sequelize也能支持。
以下是一个使用Sequelize进行复合主键连接查询的示例:
const { Sequelize, DataTypes, Model } = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql'
});
class Parent extends Model {}
Parent.init({
key1: {
type: DataTypes.INTEGER,
primaryKey: true
},
key2: {
type: DataTypes.INTEGER,
primaryKey: true
},
// 其他字段
}, { sequelize, modelName: 'Parent' });
class Child extends Model {}
Child.init({
parentId1: {
type: DataTypes.INTEGER,
references: {
model: Parent,
key: 'key1'
}
},
parentId2: {
type: DataTypes.INTEGER,
references: {
model: Parent,
key: 'key2'
}
},
// 其他字段
}, { sequelize, modelName: 'Child' });
// 关联
Parent.hasMany(Child, { foreignKey: ['parentId1', 'parentId2'], sourceKey: ['key1', 'key2'] });
Child.belongsTo(Parent, { foreignKey: ['parentId1', 'parentId2'], targetKey: ['key1', 'key2'] });
// 查询示例
Parent.findAll({
include: [Child]
}).then(results => console.log(results));
这个示例展示了如何定义具有复合主键的模型,并建立它们之间的关联,然后进行连接查询。注意,这只是一个基本示例,实际应用中可能需要根据具体需求进行调整。