関連記事は⬇︎⬇︎
利用シーン
🎯 アプリケーションの起動に必要なデータ ( デフォルトの言語やデフォルトのジャンルなど ) をデータベースに一括入力できます。
🎯 開発環境でアプリケーションを検証して使用するための基本データを一括入力できます。
これは、開発データベースのリセットが必要になる場合がある Prisma Migrate を使用している場合に特に便利です。
prisma.seed キーを追加する
Prisma の統合シード機能は、package.json ファイルの prisma.seed キーに実行するコマンドを設定しておいて、prisma db seed
がそれを実行します。
Line 7-9 を追加します。
// package.json { "name": "backend", "version": "1.0.0", "main": "index.js", "prisma": { "seed": "ts-node prisma/seed.ts" }, ...
プロジェクトの prisma フォルダー内にシード スクリプト( seed.ts ) を記述します。
仮に以下のように Daibunrui、Chubunrui テーブルがあるとします。
大分類データを先に入力し、各大分類別 中分類でーたを入力することを想定します。
// 大分類 model Daibunrui { id Int @id @default(autoincrement()) name String @unique daibunruis Chubunrui[] } // 中分類 model Chubunrui { id Int @id @default(autoincrement()) name String @unique daibunrui Daibunrui? @relation(fields: [daibunruiId], references: [id]) daibunruiId Int? }
prisma/seed-sources.ts
に入力データを作成します。(任意)
// prisma/seed-sources.ts export const daibunrui = [ { name: "HOGE" }, { name: "FOO" }, { name: "BAR" }, { name: "BAZ" }, ... ]; const hogeId = 1; const fooId = 2; const barId = 3; const bazId = 4; export const chubunrui = [ { name: "hoge1", daibunruiId: hogeId }, { name: "hoge2", daibunruiId: hogeId }, ... { name: "foo1", daibunruiId: fooId }, { name: "foo2", daibunruiId: fooId }, ... { name: "bar1", daibunruiId: barId }, { name: "bar2", daibunruiId: barId }, ... { name: "baz1", daibunruiId: bazId }, { name: "baz2", daibunruiId: bazId }, ... ];
createMany()
で一括入力できます。( SQLite はサポートしません )
skipDuplicates: true
で重複データを排除します。
// prisma/seed.ts import { PrismaClient } from "@prisma/client"; import { daibunrui, chubunrui } from "./seed-sources"; const prisma = new PrismaClient(); async function main() { try { await prisma.daibunrui.createMany({ data: [...daibunrui], skipDuplicates: true }); } catch (error) { console.error(error); } finally { await prisma.chubunrui.createMany({ data: [...chubunrui], skipDuplicates: true }); } } main() .then(async () => { await prisma.$disconnect(); }) .catch(async (e) => { console.error(e); await prisma.$disconnect(); process.exit(1); });
実行する
try🐶everything backend$ npx prisma db seed Environment variables loaded from .env Running seed command `ts-node prisma/seed.ts` ... 🌱 The seed command has been executed. try🐶everything backend$
確認する
npx prisma studio
コマンドで Prisma Studio
を実行して確認します。
デフォルトで 5555 ポートを使用しますが、Android エミュレーターも同じポートを利用するので変更しておくと良いと思います。
$ npx prisma studio -p 5505
コメント