ホーム

🏡

prisma導入

作成日: 2024-01-27T15:31:00.000Z

最終更新: 2024-08-07T13:15:00.000Z

install

npm install prisma --save-dev

init

npx prisma init

スキーマの読み取り

  • databaseにあるテーブルのスキーマを取得し、prismaの形式に変換して出力する
npx prisma db pull
CREATE TABLE IF NOT EXISTS `todos` (
    `id`         INT UNSIGNED AUTO_INCREMENT,
    `title`      TEXT NOT NULL,
    `status`     ENUM('pending', 'completed') DEFAULT 'pending',
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `update_at`  TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

    PRIMARY KEY (`id`)
);

model todos {
  id         Int           @id @default(autoincrement()) @db.UnsignedInt
  title      String        @db.Text
  status     todos_status? @default(pending)
  created_at DateTime?     @default(now()) @db.Timestamp(0)
  update_at  DateTime?     @default(now()) @db.Timestamp(0)
}

enum todos_status {
  pending
  completed
}

初期移行

https://www.prisma.io/docs/getting-started/setup-prisma/add-to-existing-project/relational-databases/baseline-your-database-typescript-mysql

migration

Original error: Error code: P1010

のエラー発生。

https://zenn.dev/prog24/scraps/159cfebf431e5bが参考になった。

結論

https://www.prisma.io/docs/orm/prisma-migrate/understanding-prisma-migrate/shadow-database#shadow-database-user-permissions

ここでMySQLの場合は

Database user must have CREATE, ALTER, DROP, REFERENCES ON . privileges

このように書かれている。

grant create, alter, drop, references on *.* to user;

を実行を試みたが、どうやらuserでは権限がなく付与できなかった。

mysqlをroot権限で入り直し、再度実行することで無事解決。

schema.prismaを書き換えるだけでは、型推論は変化しない。

prisma generate を実行することで、変更が適用される。

form vs fetcher

https://remix.run/docs/en/main/discussion/form-vs-fetcher

これらを使い分ける際の基準は、URLを変更するかどうか