【问题标题】:Sequelize Hook before create find the last created field value and increment the new value +1Sequelize Hook before create 查找最后创建的字段值并将新值增加+1
【发布时间】:2020-06-23 11:31:09
【问题描述】:

我使用 sequelize,我的表格看起来像这样。

id uploadedFileID flowSectionID flowID position createdAt updatedAt

我想当我在表上创建新数据时检查是否有一行,找到flowID:1(示例),然后取字段最后一个值的位置,如果是flowID的新数据:1 然后将位置增加到 1,但如果有一个带有 flowID:1 的行(文件)取最后一个值“1”,那么取我创建的新行并将新行“位置”字段设为 2。

我的模特:

'use strict';
module.exports = (sequelize, DataTypes) => {
  const FlowSectionsUploadedFiles = sequelize.define('FlowSectionsUploadedFiles', {
    uploadedFileID: DataTypes.INTEGER,
    flowSectionID: DataTypes.INTEGER,
    flowID: DataTypes.INTEGER,
    position: DataTypes.INTEGER
  }, {
    hooks: {
      beforeCreate: (instance, options) => {

      }
    }
  });
  FlowSectionsUploadedFiles.associate = function(models) {
  };
  return FlowSectionsUploadedFiles;
};

我怎么钩这个??谢谢!!

【问题讨论】:

  • 您似乎在尝试重新发明自动增量列。您应该在数据库中创建一个自动增量列,然后在您的模型中使用 autoIncrement 描述该列:true

标签: node.js sequelize.js


【解决方案1】:
 hooks: {
     beforeCreate: async (instance) => {
     const files = await FlowSectionsUploadedFiles.findAll({
       where: { flowID: instance.dataValues.flowID },
       raw: true 
      });
      if (files.length === 0) {
          instance.position = 1;
      } else {
          const position = [];
          files.map(file => {
              position.push(file.position);
          });
          let max = Math.max.apply(null, position);
          instance.position = max + 1;
      }
      }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    相关资源
    最近更新 更多