【问题标题】:Sequelize double relationships续订双重关系
【发布时间】:2020-09-09 15:38:39
【问题描述】:

我正在做一个 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);

这是一个正确的解决方案吗?

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    使用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)
    

    这允许您使用自动生成的关联方法并在用户上查询用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-20
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多