1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Prismaで存在しないレコードを削除するときに注意すること

Posted at

はじめに

Prismaをご存知でしょうか?PrismaはオープンソースのORM(Object-relational mapping)で、SQLを書かずにDBを操作できるツールです。

実装内容

book_mstというテーブルがあり、bookIdというカラムを持っています。
指定したbookIdを持つレコードがある場合は該当のレコードを消し、指定したbookIdを持つレコードがない場合は何もしないという処理を実装しようとしていました。

遭遇した課題

Prismaで以下のようなクエリを用意しました。

sql
prisma.book.delete({
  where: {
    bookId: bookId,
  },
});

しかし該当するbookIdがない場合以下のようなエラーが出現しました。

error
An operation failed because it depends on one or more records that were required but not found. Record to delete does not exist.

SQLでは、DELETE文でWHERE句を使用してレコードを削除する際、指定した条件に一致するレコードが存在しない場合でもエラーは発生しないはずです。単に削除対象のレコードが存在しないだけでクエリは正常に完了します。

sql
DELETE FROM book_mst WHERE bookId = 123;

オープンソースを確認すると、この箇所の改善要請は上がっているみたいですがまだ修正されていないようです。
https://github.com/prisma/prisma/issues/4072

解決策

以下のようにレコードの存在確認をしてからクエリを通したらエラーに遭遇しなくなりました!

sql
const existingRecord = prisma.book.findUnique({
    where: {
      bookId: bookId,
    },
});
    
if (existingRecord) {
    prisma.book.delete({
        where: {
            bookId: bookId,
        },
    });
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?