Nodejs Sequelize 多个主键连接查询的问题

发布于 1周前 作者 yibo5220 来自 nodejs/Nestjs

Nodejs Sequelize 多个主键连接查询的问题
sequelize hasMany 只支持定义一个 foreign key, 如果我有两个 foreign key 怎么处理呢

3 回复

在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));

这个示例展示了如何定义具有复合主键的模型,并建立它们之间的关联,然后进行连接查询。注意,这只是一个基本示例,实际应用中可能需要根据具体需求进行调整。

回到顶部