使用Prisma如何清除数据库

323 阅读1分钟

在测试一个使用Prisma的网站时,我不时地需要清除数据库,以清除我输入的测试数据。

你可以通过使用清除输入的项目。

await prisma.user.deleteMany({})

如果出于某种原因,你想对这些项目进行迭代,做一些处理,你可以用这种方式迭代它们。

const users = await prisma.user.findMany({})

const deleteUser = async (user) => {
  return await prisma.user.delete({
    where: { id: user.id }
  })
}

const deleteUsers = async () => {
  users.map((user) => deleteUser(user))
}

deleteUsers()

在这种情况下,我没有比前面的例子做更多的事情,这使得所有这些代码都是多余的,但是你可以在deleteUser()

但我遇到了一个问题,因为我在两个表之间有一个关系,即tweets和用户。一条推特与一个用户相关联。首先我必须删除所有的tweets,然后删除所有的用户,所以我写了这个函数。

export const clearData = async (prisma) => {
  const users = await prisma.user.findMany({})
  const tweets = await prisma.tweet.findMany({})

  const deleteUser = async (user) => {
    return await prisma.user.delete({
      where: { id: user.id }
    })
  }
  const deleteTweet = async (tweet) => {
    return await prisma.tweet.delete({
      where: { id: tweet.id }
    })
  }

  const deleteTweets = async () => {
    return Promise.all(tweets.map((tweet) => deleteTweet(tweet)))
  }

  const deleteUsers = async () => {
    return Promise.all(users.map((user) => deleteUser(user)))
  }

  await deleteTweets()
  await deleteUsers()
}

注意使用Promise.all() 来包裹users.map() ,这样我就可以在上面使用await ,所以在我开始删除用户之前,所有的推文都被删除。