Okarin note

頭の整理もかねて色々と書いていきます

最近流行りのprismaを使ってみた。CRUD操作編

どうも、okarinです。

前は環境構築だけだったので基本の CRUD 操作をやっていきます。
使っていて思ったんですが prisma cli や client が型定義を自動で認識してくれているのでものすごく使いやすかったです。
TypeORM で作っていたテーブルクラスも必要なかったので感動しました。

テーブル定義

model Post {
  id        Int      @id @default(autoincrement())
  content   String
  postedBy  String
  trackingCookie String
  createdAt DateTime @default(now())
}

前のテーブル定義で作ったものと同じです。

CRUD 処理

あくまで基本的な処理だけです。
複雑なクエリなどを組み立てたい場合はドキュメントを参照ください。

www.prisma.io

追加(CREATE)

create

追加のメソッドです。 data のプロパティに対してテーブルのオブジェクトを渡せばそのまま追加できます。
TypeORM の getRepository にある Insert メソッドと同じ動きですかね。

import { PrismaClient } from "@prisma/client";
import { PostInfo } from "../../businessLogic/bulletinBoard/post";

const prisma = new PrismaClient();

export async function create(post: Readonly<PostInfo>): Promise<void> {
    await prisma.post.create({
        data: {
            content: post.content,
            postedBy: post.postedBy,
            trackingCookie: post.trackingCookie
        }
    });
}

取得(READ)

findMany()

全件取得をするメソッドです。
where などの条件は以下のようにします。

findMany(
    where: {
      content: 'コンテンツだよ'
    },
)
import { Post, PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

export async function findMany(): Promise<Post[]> {
    return await prisma.post.findMany();
}

findUnique

単体の取得はこのメソッド。
名前が非常に分かりやすい。

select オブジェクトで取得したいプロパティに真偽値を付けることで取得できる。

import { Post, PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

export async function findMany(): Promise<Post[]> {
    return await prisma.post.findUnique({
        where: {
            id: 1,
        },
        select: {
            content: true,
            postedBy: true,
        },
    });
}

上記で実行するとこんな感じのオブジェクトが来るよ。

{ content: '一つ目のコンテンツだよ', postedBy: 'okarin' }

更新(UPDATE)

update

単体更新のメソッドです。
追加の create が update に変わっただけに見えるので非常に覚えやすいですね。

import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

export async function findMany(): Promise<void> {
    await prisma.post.update({
        where: {
            id: 1,
        },
        data: {
            content: '更新するよ',
        },
    });
}

updateMany

複数更新のメソッドです。 プロパティに対してオブジェクトで指定ができるようになっています。

import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

export async function findMany(): Promise<void> {
    await prisma.post.updateMany({
        where: {
            content: {
                contains: '含まれているもの全部が対象だよ'
            },
        },
        data: {
            content: 'すべて一括更新するよ',
        },
    });
}

削除(DELETE)

delete

削除用のメソッドです。
ここまで見ていただければ分かるかもですが CRUD のメソッドはほぼ同じ見た目です。 とても簡単に実装できますね!

import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

export async function findMany(): Promise<void> {
    await prisma.post.delete({
        where: {
            id: 1
        }
    });
}

where で使う条件指定のオプション

contains など色々あるので詳細はこちらの公式ドキュメントが詳しいです。

www.prisma.io

おわりに

興味本位で触りましたが楽しみながらやってました。
しばらくはずっとこれを使っていそうです! とてもよいおもちゃを見つけた!

さらっと書いただけなので間違いとかあったらご指摘お願いします!