在測試使用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和users。一篇tweet與一個user相關聯。所以我需要先刪除所有的tweets,然後再刪除所有的users。為此,我編寫了以下函數:
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
,以便在開始刪除users之前先刪除所有tweets。