Prismaで日付データを扱う

RDBMSを使うとなると、created_atなどで日付・時間データを扱うことが多いのではと思ったので、ちょっと試してみました。 カラム定義には、DateTimeを指定 テーブルやカラムの定義は、schema.prism […]

広告ここから
広告ここまで

目次

    RDBMSを使うとなると、created_atなどで日付・時間データを扱うことが多いのではと思ったので、ちょっと試してみました。

    カラム定義には、DateTimeを指定

    テーブルやカラムの定義は、schema.prismaファイルに書きます。

    日付・時間データを扱うカラムを足す場合は、DateTime型を指定します。

    model Post {
      id        Int     @id @default(autoincrement())
      title     String
      content   String?
      published Boolean @default(false)
      published_at DateTime?
    }

    レコード作成時の日時を設定したい場合

    Prismaでは、@defaultでデフォルト値を指定できます。

    日時データで「今」を設定したい場合は、now()を入れましょう。

    model Post {
      id        Int     @id @default(autoincrement())
      title     String
      content   String?
      published Boolean @default(false)
      published_at DateTime?
      created_at DateTime @default(now())
    }

    INSERT / UPDATE / WHEREではDate型で値を指定する

    データを入れる時は、Date型で値を渡します。moment / dayjsなどを使う場合、toDate()などでDateオブジェクトに変換しましょう。

        await prisma.post.create({
            data: {
                title: faker.lorem.word(),
                published_at: dayjs().add(1, 'day').toDate(),
                author: {
                    create: {
                        name: faker.name.firstName(),
                        email: faker.internet.email(),
                    }
                }
            }
        })

    検索でも同様です。

    lte, lt, equals, gt, gteなどで範囲指定ができます。

       const users = await prisma.user.findMany({
            where: {
                posts: {
                    every: {
                        published_at: {
                            lte: dayjs().add(1, 'day').toDate(),
                            gte: dayjs().subtract(1, 'day').toDate(),
                        }
                    }
                }
            },
            include: {
                posts: true,
            },
        })

    参考記事

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark