Использование хуков для установки связанного экземпляра в Sequelize (ORM) - PullRequest
0 голосов
/ 10 марта 2019


В настоящее время у меня есть моделирование для Sequlieze Model, как показано ниже:

const RideModel = sequelize.define(
  "rides",
  {
    uuid: {
      type: Sequelize.UUID,
      primaryKey: true
    },
    pickup_time: {
      type: Sequelize.DATE
    },
    fare: {
      type: Sequelize.DOUBLE
    },
    commision_percentage: {
      type: Sequelize.DOUBLE
    }
  },
  {
    hooks: {
      beforeCreate: (ride, Option) => {
        console.info("payment type updated hook");
        PaymentType.findOne({
          where: {
            type: Option.paymentType
          }
        }).then(paymentType => {
          console.info("Setting Payment Type");
          ride.paymentType = paymentType;
          Option.include.push({ as: "paymentType", model: PaymentType });
          console.info(ride.paymentType);
        });
      }
    }
  }
);

В приведенном выше коде я ищу тип платежа, который будет сохранен в поездке. На основании логов я вижу, что ловушка вызывается до того, как создается поездка. Даже внутри хука значение paymentType также установлено на поездку.

Единственное, что я не могу увидеть, чтобы paymentTypeUuid был сохранен в таблице «поездок» в MySQL DB. Не могли бы вы, ребята, сообщить мне возможное решение для достижения этой цели с помощью крючка? ЖУРНАЛ: Sync All Tables payment type updated hook Setting Payment Type payment_types { dataValues: { uuid: '111', type: 'CASH', description: 'CASH', createdAt: 2019-03-09T08:54:19.000Z, updatedAt: 2019-03-09T08:54:19.000Z }, _previousDataValues: { uuid: '111', type: 'CASH', description: 'CASH', createdAt: 2019-03-09T08:54:19.000Z, updatedAt: 2019-03-09T08:54:19.000Z }, _changed: {}, _modelOptions: { timestamps: true, validate: {}, freezeTableName: true, underscored: false, underscoredAll: false, paranoid: false, rejectOnEmpty: false, whereCollection: { type: 'CASH' }, schema: null, schemaDelimiter: '', defaultScope: {}, scopes: [], indexes: [], name: { plural: 'payment_types', singular: 'payment_type' }, omitNull: false, setterMethods: true, sequelize: Sequelize { options: [Object], config: [Object], dialect: [MysqlDialect], queryInterface: [QueryInterface], models: [Object], modelManager: [ModelManager], connectionManager: [ConnectionManager], importCache: {}, test: [Object] }, hooks: {}, uniqueKeys: { payment_types_type_unique: [Object] } }, _options: { isNewRecord: false, _schema: null, _schemaDelimiter: '', raw: true, attributes: [ 'uuid', 'type', 'description', 'createdAt', 'updatedAt' ] }, __eagerlyLoadedAssociations: [], isNewRecord: false } Create a new ride

...