序列化:通过数据透视表字段过滤“多对多”关联

时间:2020-10-28 14:29:31

标签: mysql sequelize.js many-to-many associations has-and-belongs-to-many

我有3个模型:A,B及其枢纽AsB。 我正在尝试获取所有A / B实体(查询其各自的存储库),其中ivot的boolToCheck为true。 我已经能够过滤每个其他模型的字段(例如:A,其中B.bField是任何东西),但是不能通过透视字段过滤。

我该怎么办? 谢谢!

模型A

module.exports = (sequelize, DataTypes) => {
  const A = sequelize.define(
    "a",
    {
      aField: {
        allowNull: false,
        type: DataTypes.STRING,
      },
    },
    {}
  );
  A.associate = function (models) {
    A.belongsToMany(models.B, {
      through: "asBs",
      onDelete: "RESTRICT",
      onUpdate: "CASCADE",
    });
  };
  return A;
};

B型

module.exports = (sequelize, DataTypes) => {
  const B = sequelize.define(
    "b",
    {
      bField: {
        allowNull: false,
        type: DataTypes.STRING,
      },
    },
    {}
  );
  B.associate = function (models) {
    B.belongsToMany(models.A, {
      through: "asBs",
      onDelete: "RESTRICT",
      onUpdate: "CASCADE",
    });
  };
  return B;
};

PIVOT AB

module.exports = (sequelize, DataTypes) => {
  const AsBs = sequelize.define(
    "asBs",
    {
      aId: {
        allowNull: false,
        type: DataTypes.NUMBER,
      },
      bId: {
        allowNull: false,
        type: DataTypes.NUMBER,
      },
      boolToCheck: {
        allowNull: false,
        type: DataTypes.NUMBER,
      },
    },
    {}
  );
  AsBs.associate = function (models) {
    AsBs.belongsTo(models.A, {
      onDelete: "RESTRICT",
      onUpdate: "CASCADE",
    });
    AsBs.belongsTo(models.B, {
      onDelete: "RESTRICT",
      onUpdate: "CASCADE",
    });
  };
  return AsBs;
};

0 个答案:

没有答案