FindOrCreate с 2 уникальными столбцами - PullRequest
0 голосов
/ 29 октября 2018

Я использую сиквелиз. У меня простая модель с 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
}
...