📝

Prismaでこれやりたい集

2023/04/05に公開

この記事の目的

React(Typescript)とNest.jsを使って簡易的な習慣アプリを作成中で、DB操作にPrismaを使用しており、今後のためのメモとして記載しています。

フロントエンド(React)
https://github.com/Yuji5117/habit_tracker_react

バックエンド(Nest.js/Prisma)
https://github.com/Yuji5117/habit_tracker_nestjs

定義したモデルスキーマを元にテーブルを生成したい

npx prisma migrate dev --name init

モデルスキーマの変更を反映したテーブルを生成をしたい

npx prisma migrate dev --name <変更内容の名前>

定義したモデルスキーマをDBにマイグレートしなおしたい

npx prisma migrate reset 

親を削除したときに子供と孫まで削除したい(Cascading deletes)

@relationで定義時に、onDelete: Cascadeを指定することで親が削除された際に子も削除されます。

削除せずにレコードを残したい場合にはonDelete: SetNullを指定することでレコードを残すことも出来ます。

model Habit {
  habitId Int @default(autoincrement()) @id
  title String
  habitStatuses HabitStatus[]
  createdAt DateTime @default(now())
  updatedAt DateTime @default(now())
}

model HabitStatus {
  habit_status_id Int @default(autoincrement()) @id
  habit Habit @relation(fields: [habitId], references: [habitId], onDelete: Cascade)
  habitId Int
  isCompleted Boolean
  targetedDate String
}

参考文献
https://www.prisma.io/docs/guides/upgrade-guides/upgrading-versions/upgrading-to-prisma-3/referential-actions

特定の期間を条件検索(where)する方法

SQL分のbetweenに相当するもので、特定の期間を条件指定する際、
lt (less than) gt (greater than) など where 句で使えるものがあります。
これは date 型にも適用できます。

  const data = await client.post.findMany({
    where: {
      createdAt: {
        gte: new Date("2020-01-01"),
        lt:  new Date("2020-01-02")
      },
    },
  });

参考記事
https://zenn.dev/seya/articles/0fdd26aa9a6ee7

Prismaで、リレーション先のデータに対するWHEREクエリを作りたい

参考記事
https://wp-kyoto.net/prisma-nested-where-query/

PrismaでDatetime型をwhereする

以下参考記事

https://zenn.dev/matsuo/articles/1056ccfb06be5c
https://www.prisma.io/docs/reference/api-reference/prisma-client-reference#lt

Discussion