ここ最近よくつかうPrismaで、複合キーの検索の書き方で少しはまったので、そのメモです。
schema.prisma
model Comments {
pid String
cid String
created DateTime @default(now())
text String@@unique([pid, cid])
}
upsert というのは、レコードがある場合はupdte、ない場合はinsert するという便利なものです。
プログラムでは、update01 に update しています。
このときの、複合キーpid_cid という書き方が、よくわかりませんでした。
https://decode.red/blog/202406151786/
あと上記でもためしたDay.jsで時刻の範囲を検索してみました。
PrismaはUTCで保存するので、検索もUTC行っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
import { PrismaClient } from '@prisma/client' import dayjs from 'dayjs' import React from 'react' import utc from 'dayjs/plugin/utc' import timezone from 'dayjs/plugin/timezone' dayjs.extend(utc) dayjs.extend(timezone) const tz = 'Asia/Tokyo' const prisma = new PrismaClient() const page = async () => { const data1 = await prisma.comments.findMany({ where:{ pid: 'p002', created: { gte: new Date('2024-06-16T09:00:00.000Z'), lt: new Date('2024-06-16T11:00:00.000Z') } } }) console.log('data1', data1) const now = dayjs().utc() //const now = dayjs().tz(tz) const data2 = await prisma.comments.findMany({ where:{ created: { gte: now.startOf('day').toISOString(), lt: now.endOf('day').toISOString(), } } }) console.log('data2', data2) await prisma.comments.upsert({ where:{ pid_cid:{ pid: 'p001', cid: 'c001' } }, update:{ text: 'update01' }, create:{ pid: 'p001', cid: 'c001', text: 'create01' } }) return ( <div>page</div> ) } export default page |
プログラムはNext.jsで、ブラウザで、画面を表示することで実行しています。
メモでした。