sql >> Base de Datos >  >> RDS >> Database

Prisma, cómo borrar la base de datos

Mientras probaba un sitio que usaba Prisma, tuve la necesidad de borrar la base de datos de vez en cuando, para borrar los datos de prueba que ingresé.

Puede borrar los elementos ingresados ​​usando:

await prisma.user.deleteMany({})

Si por alguna razón desea iterar sobre los elementos para realizar algún procesamiento, puede iterar sobre ellos de esta manera:

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

En este caso, no estoy haciendo nada más que el ejemplo anterior, lo que hace que todo este código sea redundante, pero puedes hacer lo que quieras dentro de deleteUser() .

Sin embargo, tuve un problema porque tenía una relación entre 2 tablas, tweets y usuarios. Se asoció un tweet a un usuario. Primero tuve que eliminar todos los tweets, luego eliminar a todos los usuarios, así que escribí esta función:

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

Observe el uso de Promise.all() para envolver users.map() entonces podría usar await en él, por lo que todos los tweets se eliminan antes de que comience a eliminar usuarios.