在測試使用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和users。一篇tweet與一個user相關聯。所以我需要先刪除所有的tweets,然後再刪除所有的users。為此,我編寫了以下函數:

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,以便在開始刪除users之前先刪除所有tweets。