Реализация функции поиска в Prisma / GraphQL

Я хочу реализовать простую функцию поиска с помощью Prisma. Я видел некоторую информацию об использовании предложения where, но оно чувствительно к регистру, поэтому это не лучшее решение.

Я также видел несколько руководств с использованием внешних сервисов. Я не хочу использовать какие-либо внешние сервисы. Я хочу сделать что-нибудь как можно проще.

В любом случае я могу настроить запрос, чтобы он был нечувствительным к регистру? или любой другой подход, который вы, ребята, порекомендуете?

Спасибо :)


person JV Lobo    schedule 05.12.2018    source источник


Ответы (3)


Эта функция еще не реализована: https://github.com/prisma/prisma1/issues/1183

Однако вы можете иметь прямой доступ к своей базе данных, если она поддерживает эту функцию: https://www.prisma.io/docs/prisma-graphql-api/reference/raw-database-access-qwe4/#overview

person Errorname    schedule 05.12.2018
comment
Отличный ответ, большое спасибо за указание на актуальные проблемы! - person nburk; 05.12.2018
comment
спасибо за помощь Errorname. немного обескураживает то, что все простые вещи, которые я пытаюсь сделать с Prisma, еще не реализованы ???? Я также пробовал использовать необработанный доступ ... но мне не удалось заставить его работать ... в любом случае, спасибо за информацию. - person JV Lobo; 06.12.2018
comment
Prisma - молодая технология, но она очень многообещающая. Вот почему все больше и больше разработчиков используют Prisma. Но это также означает, что запросов на новые функции становится все больше и больше, и на команду оказывается все больше и больше давления! Они нанимают, но масштабировать команду непросто :) Думаю, нам просто нужно набраться терпения - person Errorname; 06.12.2018
comment
@Errorname вы знаете, актуально ли это решение? Есть ли в 2020 году способ запроса без учета регистра? - person Xalsar; 20.04.2020

Вы можете выполнять поисковые запросы с помощью клиента prisma. Вот пример автоматически сгенерированного интерфейса для параметра запроса where объекта User в одном из моих приложений.

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_contains и name_starts_with. Оба они годны для использования для простого поиска, вот пример преобразователя -

const userSearchResolver = async (_root, _args, _context) => {
    return await _context.prisma.users({
      where: {
        name_starts_with: _args.searchQuery
      }
    });
  }
);
person Steve Mason    schedule 10.03.2019
comment
Только что сообразил, что вы ищете поиск с учетом регистра ... извините ... Я бы рекомендовал создать отдельный клиент базы данных для подключения к базе данных prisma не через клиент prisma и просто выполнить текстовый поиск используя стандартный клиент db. Например, если вы хотите использовать mongodb для призмы, вы можете просто использовать клиент mongo в своем преобразователе для выполнения текстовый поиск - person Steve Mason; 11.03.2019

Пробный режим

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