【GraphQL】Prismaを使って、特定のPostgresSQLデータを取得する
GraphQL

【GraphQL】Prismaを使って、特定のPostgresSQLデータを取得する

作成日:2021年11月21日
更新日:2021年11月25日

前回は、Prisma を使って、PostgresSQL データを取得しました。

graphql-prisma-postgres-get

【GraphQL】Prismaを使って、PostgresSQLデータを取得する

今回は、特定の PostgresSQL データを取得します。

コードは、前回のコードを使用します。

また、Prisma Studio に Book のデータを追加しました。

image2

Book の isRead が true のデータ一覧を取得する

まずは、isReadが true か false かで一覧を取得できるようにします。

resolvers フォルダの Query.ts を開きます。

QuerybooksisReadを追加します。

ts
books: (_: any, { isRead }: { isRead: boolean }, { prisma }: Context) => {
return prisma.book.findMany();
},

findMany()の中に、isRead を抽出するコードを作成します。

prisma でデータを抽出するには、whereを使います。

ts
books: (_: any, { isRead }: { isRead: boolean }, { prisma }: Context) => {
return prisma.book.findMany({
where: {
isRead,
},
});
},

また、shema.ts のtypeDefsに設定している、BooksfilterisRead:Boolean!にします。

BooksInput も削除しておきましょう。

ts
type Query {
books(isRead: Boolean!): [Book!]!
book(id: Int!): Book
categories: [Category!]!
category(id: Int!): Category
}

では、GraphQL サーバーを起動して確認します。

isReadtrueの場合を設定します。

graphql
query FilteredBooks {
books(isRead: true) {
id
title
author
}
}

FilteredBooks ボタンをクリックすると、

image3

isRead が true のデータのみ抽出することができました。

単一データを取得する

次は、特定の ID データを取得します。

resolvers フォルダの Query.ts を開きます。

book の args に id を選択し、db を prisma にします。

ts
book: (_: any, { id }: { id: number }, { prisma }: Context) => {
},

prisma で単一のデータを取得するには、findUniqueを使用します。

さらに、idを指定するために、whereも使用します。

ts
book: (_: any, { id }: { id: number }, { prisma }: Context) => {
return prisma.book.findUnique({
where: {
id,
},
});
},

完成しましたので、GraphQL で確認します。

ts
query SingleBook($bookId: Int!) {
book(id: $bookId) {
id
title
author
}
}

bookId は、『1』を指定します。

image4

SingleBook ボタンをクリックすると、

image5

id が『1』のデータを取得することができました。

カテゴリ一覧のデータを取得する

Book の categoryId を使って、カテゴリ一覧のデータを取得します。

resolvers フォルダの Query.ts を開きます。

Query の books や book を参考に、categories と category を修正します。

ts
categories: (_: any, __: any, { prisma }: Context) => {
return prisma.category.findMany();
},
category: (_, { id }: {id: number}, { prisma }: Context) => {
return prisma.category.findUnique({
where : {
id
}
})
},

resolvers フォルダの Category.ts を開きます。

prisma のfindManyを使い、book のcategoryIdと category のidを紐付けます。

ts
import { Context } from "../index";
export const Category = {
books: ({ id }: { id: number }, _: any, { prisma }: Context) => {
return prisma.book.findMany({
where: {
categoryId: id,
},
});
},
};

GraphQL で確認します。

image6

Categories ボタンをクリックすると、

image7

カテゴリ別でデータを取得することができました。

Book の categoryId からカテゴリ名を取得する

resolvers フォルダの Book.ts を開きます。

prisma のfindUniquieを使い、category のidと book のcategoryIdを紐付けます。

ts
import { Context } from "../index";
export const Book = {
category: (
{ categoryId }: { categoryId: number },
_: any,
{ prisma }: Context
) => {
return prisma.category.findUnique({
where: {
id: categoryId,
},
});
},
};

では、ブラウザで確認しましょう。

image8

Book ボタンをクリックすると、

image9

Book データ内で、カテゴリ名を取得することができました。

index.ts の db は、必要ないので削除します。

全文は、以下の通りです。

次回は、PostgresSQL データを追加や削除、更新します。

graphql-prisma-postgres-add-delete-update

【GraphQL】Prismaを使って、PostgresSQLデータを追加・削除・更新をする

© 2024あずきぱんウェブスタジオ