首页 > 解决方案 > FindOrCreate 具有 2 个唯一列

问题描述

我正在使用sequelise 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
}

标签: mysqlnode.jsormsequelize.js

解决方案


推荐阅读