関連記事は⬇︎⬇︎
利用シーン
🎯 アプリケーションの起動に必要なデータ ( デフォルトの言語やデフォルトのジャンルなど ) をデータベースに一括入力できます。
🎯 開発環境でアプリケーションを検証して使用するための基本データを一括入力できます。
これは、開発データベースのリセットが必要になる場合がある 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

コメント