在测试一个使用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() 。
但我遇到了一个问题,因为我在两个表之间有一个关系,即tweets和用户。一条推特与一个用户相关联。首先我必须删除所有的tweets,然后删除所有的用户,所以我写了这个函数。
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 ,所以在我开始删除用户之前,所有的推文都被删除。