在Prisma / GraphQL中实现搜索功能

时间:2018-12-05 04:58:16

标签: graphql prisma prisma-graphql

我想用Prisma实现一个简单的搜索功能 我已经看到了有关使用where子句的一些信息,但是它区分大小写,因此不是一个好的解决方案。

我还看过一些使用外部服务的教程。我不想使用任何外部服务。 我想做一些尽可能简单的事情。

有什么办法可以将查询调整为不区分大小写?或您推荐的其他任何方法?

谢谢:)

3 个答案:

答案 0 :(得分:3)

此功能尚未实现:https://github.com/prisma/prisma/issues/1183

但是,如果数据库支持此功能,则可以对其进行原始访问:https://www.prisma.io/docs/prisma-graphql-api/reference/raw-database-access-qwe4/#overview

答案 1 :(得分:0)

您可以使用pyramida客户端进行类似搜索的查询。这是我的其中一个应用中的User实体的where查询参数自动生成的界面的示例。

export interface UserWhereInput {
  name?: String;
  name_not?: String;
  name_in?: String[] | String;
  name_not_in?: String[] | String;
  name_lt?: String;
  name_lte?: String;
  name_gt?: String;
  name_gte?: String;
  name_contains?: String;
  name_not_contains?: String;
  name_starts_with?: String;
  name_not_starts_with?: String;
  name_ends_with?: String;
  name_not_ends_with?: String;
  ...
  AND?: UserWhereInput[] | UserWhereInput;
}

请注意name_containsname_starts_with。这些都可用于简单搜索,这是一个解析器示例-

const userSearchResolver = async (_root, _args, _context) => {
    return await _context.prisma.users({
      where: {
        name_starts_with: _args.searchQuery
      }
    });
  }
);

答案 2 :(得分:0)

尝试模式

const users = await prisma.user.findMany({
  where: {
    email: {
      endsWith: "prisma.io",
      mode: "insensitive", // Default value: default
    },
  },
});