Докато тествах сайт, който използва Prisma, имах нужда да изчиствам базата данни от време на време, за да изчистя тестовите данни, които въведох.
Можете да изчистите въведените елементи с помощта на:
await prisma.user.deleteMany({})
Ако по някаква причина искате да повторите елементите, за да извършите някаква обработка, можете да ги повторите по следния начин:
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()
В този случай не правя нищо повече от предишния пример, което прави целия този код излишен, но можете да правите всичко, което искате в deleteUser()
.
Имах проблем обаче, защото имах връзка между 2 таблици, туитове и потребители. Туит е свързан с потребител. Първо трябваше да премахна всички туитове, след това да премахна всички потребители, затова написах тази функция:
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()
}
Обърнете внимание на използването на Promise.all()
за да обвиете users.map()
така че мога да използвам await
върху него, така че всички туитове се премахват, преди да започна да изтривам потребители.