Обновление Sequelize Отношения HasMany - PullRequest
0 голосов
/ 14 апреля 2020

Я хотел бы обновить строки отношения hasMany, у меня есть таблица InRoutes, в которой может быть много InRouteDetails, поэтому, когда я обновляю InRoute, мне также необходимо обновить его детали, возможны три случая, удалить деталь , обновите детали и добавьте детали.

Когда я пытаюсь обновить, используя setInRouteDetails, но по какой-то причине он пытается получить InRouteDetail, который равен объекту, выдавшему мне эту ошибку: Сокращенное неверное значение DOUBLE: '[object Объект] '

Это моя модель:

export default (sequelize, DataType) => {
  const InRoutes = sequelize.define('InRoutes', {
    id: {
      type: DataType.INTEGER,
      primaryKey: true,
      autoIncrement: true,
    },
    name: {
      type: DataType.STRING,
      allowNull: false,
      validate: {
        notEmpty: true,
      },
    },
    description: {
      type: DataType.TEXT,
      allowNull: true,
    },
    createdBy: {
      type: DataType.STRING,
      allowNull: true,
    },
    updatedBy: {
      type: DataType.STRING,
      allowNull: true,
    },
  }, {
    classMethods: {
      associate: (models) => {
        InRoutes.hasMany(models.InRoutesDetails, {
          foreignKey: 'InRouteId',
          as: 'InRouteDetails',
          onDelete: 'CASCADE',
        });
        InRoutes.belongsTo(models.Trunks, {
          foreignKey: 'trunkId',
          as: 'TrunkId',
          onDelete: 'CASCADE',
        });
      },
    },
  });

  return InRoutes;
};

Здесь я пытаюсь обновить "InRoute" с его ассоциацией "InRouteDetails":

  async update(data, params, updatedBy) {
    data.updatedBy = updatedBy.username;

    try {
      const inRoute = await this.InRoutes.findOne({ where: params });

      const teste = [{
        id: 2,
        mask: '89',
        remove: 4,
        add: '3',
        destinationType: 'callback',
        destination: 2,
        InRouteId: 2,        
      }];
      
      await inRoute.addInRouteDetails(teste);
      await inRoute.update(data);      

      return defaultResponse(inRoute);
    } catch (error) {
      return errorResponse(error.message, HttpStatus.UNPROCESSABLE_ENTITY);
    }
  }

Это дает мне этот результат на консоли:

Executing (default): UPDATE `InRoutesDetails` SET `InRouteId`=?,`updatedAt`=? WHERE `id` IN ('[object Object]')

Он пытается сравнить id с каким-то объектом.

...