可変長パラメータリストを持つ Prisma $queryRaw 質問する

可変長パラメータリストを持つ Prisma $queryRaw 質問する

私はPostgresでPrismaを使用しています。基礎となるテーブルでサポートされていないtsvector型を使用しているため、特定のクエリに$queryRawを使用する必要があります。このクエリでは、'in'リスト内の項目をパラメータ化する必要がある'in'ステートメントも使用する必要があります。私はこれを試しました

const ids = [41, 55]
const result = await prisma.$queryRaw`select * from users where id in (${ids})`;

しかしカーネルパニックが発生します

PANIC in /root/.cargo/git/checkouts/rust-postgres-dc0fca9be721a90f/8a61d46/postgres-types/src/lib.rs:762:18
expected array type

私もこれを試してみました...

const result = await prisma.$queryRaw`select * from users where id in (${ids.join(',')})`;

しかし、このエラーが発生します...

Raw query failed. Code: `22P03`. Message: `db error: ERROR: incorrect binary data format in bind parameter 1`

Prisma で使用されていると思われる sql-template-tag ライブラリにはこれをサポートする方法があるため、インストールしてインポートした後、これを試しました。

const result = await prisma.$queryRaw`select * from users where id in (${join(ids)})`;

しかし、同じエラーが発生します。

これを実現するにはどうしたらいいでしょうか?

ベストアンサー1

RTFM:https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#タグ付きテンプレートヘルパー

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

const ids = [1, 3, 5, 10, 20];
const result = await prisma.$queryRaw`SELECT * FROM User WHERE id IN (${Prisma.join(
  ids
)})`;

おすすめ記事