Prisma V3リリースノートまとめ
短く簡単にまとめた
リリースノート: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