sql >> Databáze >  >> RDS >> Database

Prisma, jak vyčistit databázi

Při testování webu, který používal Prisma, jsem musel čas od času vymazat databázi, abych vymazal testovací data, která jsem zadal.

Zadané položky můžete vymazat pomocí:

await prisma.user.deleteMany({})

Pokud z nějakého důvodu chcete položky opakovat, abyste provedli nějaké zpracování, můžete je opakovat tímto způsobem:

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

V tomto případě nedělám nic víc než předchozí příklad, díky čemuž je celý tento kód nadbytečný, ale uvnitř deleteUser() můžete dělat, co chcete .

Měl jsem však problém, protože jsem měl vztah mezi 2 tabulkami, tweety a uživateli. Tweet byl přidružen k uživateli. Nejprve jsem musel odstranit všechny tweety a poté odstranit všechny uživatele, takže jsem napsal tuto funkci:

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

Všimněte si použití Promise.all() zabalit users.map() takže bych mohl použít await na něm, takže všechny tweety budou odstraněny, než začnu mazat uživatele.


  1. Proč nemohu zadat toto datum do tabulky pomocí SQL?

  2. SQL :v klauzuli v uložené proceduře:jak předávat hodnoty

  3. Jak provést ladění sql v Oracle

  4. Příklady DAYNAME() – MySQL