具有2个唯一列的FindOrCreate

时间:2018-10-29 14:49:47

标签: mysql node.js orm sequelize.js

我使用后继orm。我有2个唯一列的简单模型

const DataTypes =  require('sequelize')
const orm = require('./../builder')

module.exports = orm.define('users', {
  id: {
    type: DataTypes.INTEGER,
    autoIncrement: true,
    primaryKey: true
  },
  email: {
    type: DataTypes.STRING(255),
    allowNull: false
  },
  login: {
    type: DataTypes.STRING(255),
    allowNull: false
  },
  password_hash: {
    type: DataTypes.STRING(128),
    allowNull: false
  }
},
{
  indexes: [
    {
      unique: true,
      fields: ['email', 'login']
    }
  ],
  timestamps: false
})

我想创建没有重复的行。我只是使用findOrCreate事务方法:

    Users.sequelize.transaction((tx) => {
  return Users.findOrCreate({
    where: {
      email: email,
      login: login
    },
    defaults: {
      password_hash: passwordHash
    }
  })
})
.spread((user, created) => {
  console.log(created)
  console.log(user.get({
    plain: true
  }))
})

当我发送所有不同的参数后,一切都很好。但是,如果我发送了两个值差之一,第二个值等于错误Unhandled rejection SequelizeUniqueConstraintError: Validation error 工作参数示例: 第一条记录:

 {
    'email': 'x',
    'login': 'y',
    'password_hash': 123
}

第二条记录:

 {
    'email': 'z',
    'login': 's',
    'password_hash': 123
}

无法正常工作的参数示例: 第一条记录:

 {
    'email': 'x',
    'login': 'y',
    'password_hash': 123
}

第二条记录:

 {
    'email': 'x',
    'login': 'z',
    'password_hash': 123
}

0 个答案:

没有答案