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
を使うことができました そのため、ユーザーの削除を開始する前にすべてのツイートが削除されます。