När jag testade en webbplats som använde Prisma fick jag då och då rensa databasen för att rensa testdata jag angav.
Du kan rensa inmatade objekt genom att använda:
await prisma.user.deleteMany({})
Om du av någon anledning vill iterera på objekten för att göra en del bearbetning, kan du iterera över dem på detta sätt:
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()
I det här fallet gör jag inget mer än det föregående exemplet, vilket gör all denna kod överflödig, men du kan göra vad du vill i deleteUser()
.
Jag hade dock ett problem eftersom jag hade en relation mellan 2 tabeller, tweets och användare. En tweet kopplades till en användare. Först var jag tvungen att ta bort alla tweets, sedan ta bort alla användare, så jag skrev den här funktionen:
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()
}
Lägg märke till användningen av Promise.all()
för att radbryta users.map()
så jag kunde använda await
på den, så alla tweets tas bort innan jag börjar ta bort användare.