延续双重关系

Sequelize double relationships

我正在做一个允许用户之间进行虚拟交易的 node.js 项目。

一个用户可以进行多笔交易。每笔交易必须包含来自用户的 2 个 fk,它们是卖家和买家的 ID。

我在 node.js 中使用 sequelize 来构建模型。

const { Sequelize, DataTypes, Model } = require('sequelize');
import {sequelize} from '../database/connection.js';

const User = sequelize.define('User', {
    // Model attributes are defined here
    id:{
      type: DataTypes.INTEGER(11),
      allowNull: false,
      autoIncrement: true,
      primaryKey: true
    },
}, {
    // Other model options go here
    sequelize, // We need to pass the connection instance
    freezeTableName: true
});

module.exports = User

////////////////////////////////////////////////

// Trade 
const { Sequelize, DataTypes, Model } = require('sequelize');
import {sequelize} from '../database/connection.js';

const Trade = sequelize.define('Trade', {
  // Model attributes are defined here
    id:{
      type: DataTypes.INTEGER(11),
      allowNull: false,
      autoIncrement: true,
      primaryKey: true
    },
    isPaid:{
      type: DataTypes.BOOLEAN,
      defaultValue: true
    }
    // fk are in relationships.js
  }, {
  // Other model options go here
  sequelize, // We need to pass the connection instance
  freezeTableName: true
});

module.exports = Trade

///////////////////////////////////

//relationships

User.hasMany(Trade,{
    foreignKey: "offererId"
})
Trade.belongsTo(User);

//
User.hasMany(Trade,{
    foreignKey: "receiverId"
})
Trade.belongsTo(User);

这是正确的解决方案吗?

使用 super M:N 可能是您最通用的选择。

User.belongsToMany(User, { through: Trade, as: "offerer", foreignKey: "offererId"})
User.belongsToMany(User, { through: Trade, as: "receiver", foreignKey: "receiverId"})
Trade.belongsTo(User)
User.hasMany(Trade)

这允许您使用 auto-generated 关联方法并在用户上查询用户。