Podczas testowania witryny, która korzystała z Prismy, od czasu do czasu musiałem wyczyścić bazę danych, aby wyczyścić wprowadzone dane testowe.
Możesz wyczyścić wprowadzone pozycje, używając:
await prisma.user.deleteMany({})
Jeśli z jakiegoś powodu chcesz wykonać iterację elementów w celu przetworzenia, możesz wykonać iterację w ten sposób:
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()
W tym przypadku nie robię nic więcej niż w poprzednim przykładzie, co sprawia, że cały ten kod jest zbędny, ale możesz zrobić wszystko, co chcesz w deleteUser()
.
Miałem jednak problem, ponieważ miałem relację między 2 tabelami, tweetami i użytkownikami. Tweet był powiązany z użytkownikiem. Najpierw musiałem usunąć wszystkie tweety, a potem wszystkich użytkowników, więc napisałem tę funkcję:
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()
}
Zwróć uwagę na użycie Promise.all()
zapakować users.map()
więc mogę użyć await
na nim, więc wszystkie tweety są usuwane, zanim zacznę usuwać użytkowników.