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.