🕶️

PrismaのupdateManyは複数レコードに異なるデータで更新できる関数ではない

2022/07/31に公開

概要

PrismaにはupdateManyという関数が用意されていますが、この関数は複数レコードに同じデータで更新することが出来る関数であり、複数レコードに異なるデータで更新する関数ではない。

解決策

PrismaのTransaction機能を利用する。
Transactionの引数に更新処理のPromiseを配列にして渡す。
Transaction内で途中失敗時にはロールバックされることで、擬似的にCreateMany等と同様の複数データ操作に対応させている。

const dataList = [
{where: {id:1}, data: {name: 'hoge'},
{where: {id:2}, data: {name: 'huga'},
]

await prisma.$transaction(dataList.map((data) => prisma.user.update(data)));

関連資料

https://stackoverflow.com/questions/71500083/update-multiple-rows-using-prisma-without-manual-loops

https://www.prisma.io/docs/concepts/components/prisma-client/transactions

Discussion