Tijdens het testen van een site die Prisma gebruikte, moest ik de database van tijd tot tijd wissen om de testgegevens die ik had ingevoerd te wissen.
U kunt ingevoerde items wissen met:
await prisma.user.deleteMany({})
Als je om de een of andere reden de items wilt herhalen om wat verwerking uit te voeren, kun je ze op deze manier herhalen:
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()
In dit geval doe ik niets meer dan het vorige voorbeeld, waardoor al deze code overbodig is, maar je kunt alles doen wat je wilt binnen deleteUser()
.
Ik had echter een probleem omdat ik een relatie had tussen 2 tabellen, tweets en gebruikers. Een tweet is gekoppeld aan een gebruiker. Eerst moest ik alle tweets verwijderen en daarna alle gebruikers, dus schreef ik deze functie:
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()
}
Let op het gebruik van Promise.all()
om users.map()
in te pakken zodat ik await
. kan gebruiken erop, dus alle tweets worden verwijderd voordat ik gebruikers ga verwijderen.