Database
 sql >> Datenbank >  >> RDS >> Database

Prisma, wie man die Datenbank löscht

Beim Testen einer Website, die Prisma verwendete, musste ich von Zeit zu Zeit die Datenbank löschen, um die von mir eingegebenen Testdaten zu löschen.

Sie können eingegebene Elemente löschen, indem Sie Folgendes verwenden:

await prisma.user.deleteMany({})

Wenn Sie aus irgendeinem Grund über die Elemente iterieren möchten, um eine Verarbeitung durchzuführen, können Sie sie auf diese Weise durchlaufen:

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()

In diesem Fall mache ich nicht mehr als das vorherige Beispiel, was diesen ganzen Code überflüssig macht, aber Sie können innerhalb von deleteUser() alles tun, was Sie wollen .

Ich hatte jedoch ein Problem, weil ich eine Beziehung zwischen 2 Tabellen, Tweets und Benutzern hatte. Ein Tweet wurde einem Benutzer zugeordnet. Zuerst musste ich alle Tweets entfernen, dann alle Benutzer, also habe ich diese Funktion geschrieben:

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()
}

Beachten Sie die Verwendung von Promise.all() um users.map() zu umschließen also könnte ich await verwenden darauf, damit alle Tweets entfernt werden, bevor ich mit dem Löschen von Benutzern beginne.