🎉

Prisma V3リリースノートまとめ

2021/09/09に公開

短く簡単にまとめた

リリースノート:https://github.com/prisma/prisma/releases/tag/3.0.1

Referential Actions

onDelete, onUpdateを@relationの引数に設定することで、関連するデータがあったときの挙動を制御することができる。DBではよくあるやつ。

RestrictとCascadeがあって、それぞれ

  • Restrict:紐付いたデータが有る場合は削除不可能
  • Cascade:は紐付いたデータがある場合は紐付いたデータも連動して削除

という挙動になる

migration: prisma db pull でDBの既存の設定をschemaに反映させる

Named Constraints

Prismaのスキーマから発行される制約キー系の命名は制御できなかったがようやく制御できるように。

model Post {
  id      Int    @id(map: "pk_of_Post")
  blog_id Int
  blog    Blog   @relation(fields: [blog_id], references: [id], map: "Post_blog_fk")
  title   String

  @@unique([title, blog_id], name: "Post_title_blog_id_unique", map: "Post.title_blog_id_unique")
}

model Blog {
  id    Int    @id
  posts Post[]
}

こんな感じで、@relation, @@uniqueの引数のmapにprimary key, foreign key, unique keyの命名を指定できる

migration: prisma db pull でDBの既存の設定をschemaに反映させる

Microsoft SQL Server and Azure SQL Connectorがサポート

タイトル通り

prisma db seed

v2.15からあったがよりシンプルになって正式リリースとなった。package.jsonに"prisma"."seed"があればそれを実行してくれるというだけ。

// package.json
"prisma": {
  "seed": "ts-node prisma/seed.ts"
}

seedのスクリプトは実行できればOKなのでsqlでも良い。seed.tsの場合はPrismaClientを使って実装する。参考実装:https://www.prisma.io/docs/guides/database/seed-database#seeding-your-database-with-typescript-or-javascript

Node-API

Prisma Engineのバイナリ(Rust製)をNode.jsから直接操作するためのAPI。以前はサイドプロセスを介して行っていたのでかなり大きいオーバーヘッドがあった。これは嬉しい。

Order by Aggregate in Group By

ユーザーを住んでいる都市でグループ化し、ユーザー数の多い都市で結果を並べたいみたいなことができる。

await prisma.user.groupBy({
  by: ['city'],
  _count: {
    city: true,
  },
  orderBy: {
    _count: {
      city: 'desc',
    },
  },
}),

Order by Relation

Postをauthorの名前順で返すみたいなことができる。

await prisma.post.findMany({
  orderBy: {
    author: {
      name: 'asc',
    },
  },
  include: {
    author: true,
  },
})

Select Relation Count

relation先のカウントをするAPI。

const users = await prisma.user.findMany({
  include: {
    _count: {
      select: { posts: true },
    },
  },
})

Discussion