Sequelize - 两个表之间的一对多关系

时间:2021-05-18 17:42:36

标签: sequelize.js

我是 Sequelize 的新手。我正在尝试配置两个表之间的一对多关系。

我有两个表,区域和prime_siblings,我需要的是区域可以有很多prime_siblings。当我运行下一个代码时,我没有收到错误消息,但我的列 prime_siblings 没有同步。

这是我的模型及其关联:zones

    module.exports = function (sequelize, DataTypes) {
        const zones = sequelize.define('zones', {
          id: {
            primaryKey: true,
            type: DataTypes.UUID,
            defaultValue: DataTypes.UUIDV4,
          },
          name: DataTypes.STRING(50),
        }, {
          tableName: 'zones',
          underscored: true,
        });
      
        zones.associate = (models) => {
          zones.hasMany(models.prime_siblings, {
            as: 'prime_siblings',
            foreignKey: 'zones_id',
          });
        };
      
        return zones;
      };

prime_siblings


        module.exports = function (sequelize, DataTypes) {
        const primeSiblings = sequelize.define('prime_siblings', {
          id: {
            primaryKey: true,
            type: DataTypes.UUID,
            defaultValue: DataTypes.UUIDV4,
            timestamps: false,
          },
          zones_id: {
            primaryKey: true,
            type: DataTypes.UUID,
            defaultValue: DataTypes.UUIDV4,
            timestamps: false,
          },
        }, {
          tableName: 'prime_siblings',
          underscored: true,
        });
      
        primeSiblings.associate = (models) => {
        primeSiblings.belongsTo(models.zones, {
          foreignKey: 'zones_id',
        });
      };
      return primeSiblings;
    };

表格创建成功,然后使用邮递员,我使用一个发布区域的端点。

这是终点

    router.post('/', (req, res, _next) => {
        models.zones.findByPk('0333008d-fae4-4419-a22d-bf14aef782bb', { include: ['prime_siblings'] });
        models.zones.findAll({ include: ['prime_siblings'] });
        return helpers.save(models.zones, req, res);
      }
      return res.status(401).send({
        code: 'UNAUTHORIZED', message: 'Unauthorized action',
      });
     

这是我的身体:


    {
          "id":"0333008d-fae4-4419-a22d-bf14aef782bb",
          "name":"BS AS NOROESTE CENTRO",
          "created_at":"2020-03-24T17:27:52.000Z",
          "updated_at":"2021-05-13T18:59:09.000Z",
          "prime_siblings":  ["sibling_zone_id_1", "sibling_zone_id_2", "sibling_zone_id_3"]
       }

理论上,这应该添加 3 个包含此数据的新行:

    zone_id_0 sibling_zone_id_1
    zone_id_0 sibling_zone_id_2
    zone_id_0 sibling_zone_id_3

我已经搜索并尝试了多种方法,但都没有成功。

1 个答案:

答案 0 :(得分:0)

/* Requiring the models created with sequelize */
const { zones, prime_siblings } = require("./models");

async function createZone(zone) {
  try {
    /* The create method receive the data and options. Include is an option for including more than a model */
    await zones.create(zone, {
      include: [
        {
          model: prime_siblings,
          as: "prime_siblings", // This alias should match with the alias defined in the association
        },
      ],
    });
  } catch (error) {
    console.error(error);
  }
}

createZone({
  id: "0333008d-fae4-4419-a22d-bf14aef782bb",
  name: "BS AS NOROESTE CENTRO",
  created_at: "2020-03-24T17:27:52.000Z",
  updated_at: "2021-05-13T18:59:09.000Z",
  prime_siblings: [{}, {}, {}], // This array contains the objects to be created (associated with the main model)
});
相关问题