Open16
Prisma素振り
参考記事!!!!!!!!
導入
$ yarn add prisma
$ yarn prisma init
上記コマンドを実行すると prisma/schema.prisma
と .env
が自動生成された
DBを起動
$ docker-compose up
docker-compose.yml
スキーマ定義
schema.prismaを編集する。書き方の参考
👇
schema.prisma
フォーマット
$ prisma format
- schema.prismaをいい感じにフォーマットしてくれる。インデントがズレてたら直してくれたり、シンタックスエラーを検出してくれる。
- リレーションがある時、いい感じ検知してリレーションはってくれる
- ドキュメントの参考箇所
👇
マイグレーション
$ prisma migrate dev
// マイグレーション名を入力する
? Enter a name for the new migration: › add user
Applying migration `20211023013115_add_user`
The following migration(s) have been created and applied from new schema changes:
migrations/
└─ 20211023013115_add_user/
└─ migration.sql
Your database is now in sync with your schema.
✔ Generated Prisma Client (3.2.1) to ./node_modules/@prisma/client in 77ms
- prisma migrate dev を実行するたびに現状のスキーマとの差分のマイグレーションファイルが生成され、実行までされる
- ドキュメントの参考箇所
👇
Prisma Studio起動
$ prisma studio
Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Prisma Studio is up on http://localhost:5555
- http://localhost:5555にアクセスするとDBの状態が見れる
- Viewerかっこいい
- ドキュメント参考箇所
👇
CLI
ここまでで使ったコマンドまとめ
$ yarn add prisma
$ yarn prisma init
$ yarn prisma format
$ yarn prisma migrate dev
$ yarn prisma studio
- ドキュメント参考箇所
👇
APIからPrisma使ってDB操作する
TypeScript用のPrismaクライアント導入
$ yarn add @prisma/client
Create
const project = await prisma.projects.create({
data: {
name: `プロジェクト`,
project_users: {
create: {
user: {
connect: {
id: adminUser.id,
},
},
permission: {
connect: {
id: adminPermission.id,
},
},
},
},
},
});
- ドキュメント参考箇所
👇
CreateMany
const users = await prisma.users.createMany({
data: [
{
name: '管理者',
email: 'admin01@example.com',
},
{
name: 'メンバー',
email: 'member01@example.com',
},
],
});
- ドキュメント参考箇所
👇
seed.ts
はまったところ
スキーマの命名
- ほんとはmodelは 単数、UpperCamel、field名はcamelCase にしないといけなかったんだけど、テーブル名に合わせて複数形で書いてしまった!!!!!!!!
- mapを使うべき 👇. (あとでなおそう)
Truncate ない問題
- seeder書いてる時に一回全部消してまたデータ入れなおしたいと思ったりした。
await prisma.account.deleteMany({where: {}})
or raw SQL queries.
Prisma のスキーマを視覚化してくれる
便利
ここまでの感想
- prisma studio みやすい。便利。
- prisma client からのDB操作するときのコードの書き心地よいいい感じ(複雑なクエリ書くとかなるとむずそう!?!?)
- スキーマファイルの更新の差分からmigrationファイル生み出してくれて実行してくれるのめっちゃよい!!!
(普段 Laravel 使っててmigrationファイルの方を手動で書いてるんだけど、それをしなくていいのが便利!!!) - ドキュメントわかりやすい