首页 > 解决方案 > Sequelize 5 findOrCreate with undelete inside loop

问题描述

我在 Postgres 中有一个简单的用户表,如下所示:

Column     |            Type             |
-----------+-----------------------------+
 id        | integer                     |
 name      | text                        |
 email     | text                        |
 nickname  | text                        |
 deletedAt | timestamp without time zone |
Indexes:
    "user_pkey" PRIMARY KEY, btree (id)
    "unique_user" UNIQUE CONSTRAINT, btree (name, email)

当我在我的 API 上收到包含用户数据的请求时,我想创建新用户。如果用户被软删除,那么我想取消删除它们,如果用户已经存在,那么什么也不做。

const users = [];
_.each(req.body.users, (user) => {
  const u = Users.findOrCreate({
    where: {
      name: user.name,
      email: user.email
    },
    defaults: {
      name: user.name,
      email: user.email,
      nickname: user.nickname
    },
    paranoid: false,
    transaction
  }).spread(async (returnedUser, created) => {
    if (!created) {
      if (returnedUser.deletedAt) {
        await returnedUser.update({ deletedAt: null, transaction });
        await returnedUser.save({ transaction });
      }
    }
  })
  users.push(u);
});

除了取消删除部分之外,这一切似乎都有效。似乎没有抛出错误,但匹配的软删除用户仍然被删除。我正在使用续集 5。

标签: javascriptnode.jssequelize.js

解决方案


推荐阅读