Prisma Queries с условиями

В настоящее время я создаю новый проект с Prisma и думаю о том, как создавать свои SQL-запросы, когда у меня разные зависимости.

Предположим, я хочу добавить в запрос условие include или where при определенном условии. Стоит ли мне теперь использовать для этого новый метод? Как второй API Get Path/api/users/with-include соответственно /api/users/condition1

Или мне следует расширить существующий метод с помощью запроса if, как предлагается здесь?

Запрос Prisma 2 для возврата только тех записей, которые связаны со ВСЕМИ предоставленными идентификаторами тегов

И используйте параметр запроса /api/users?with-include=true соответственно /api/users?condition1=true

Какая здесь лучшая практика?

1 ответ

Поскольку у вас может быть много условий, означает ли это, что вы создадите много конечных точек для разных условий? Сначала у вас может возникнуть соблазн, но это становится негибким.

Для данной конечной точки вы можете запрашивать данные на основе таких фильтров, как where, include, limit, order и т. Д. В параметрах запроса для GET (или body, если используется POST).

ОТДЫХ

/api/users?filter[where][gender]=male&filter[take]=10

Или строковый формат JSON:

/api/users?filter={"where":{"gender":"male"},"take":10}

В приведенном выше примере вы можете создавать гибкие запросы, и вы можете напрямую использовать этот объект запроса в своем запросе Prisma, если вы создали его таким образом (в приведенном выше примере).

Но я бы не советовал использовать его напрямую, поскольку любой может манипулировать значениями параметров запроса. Скажем, кто-то изменил значение от 10 до 200. Вы бы этого не хотели. Итак, в этом случае вам нужно установить лимиты, выполнив проверку:

      const filter = getQueryObjectFromURL();

if( filter.where.take > 100 ) {
  filter.where.take = 100;
}

Наконец, вы можете использовать в Prisma вроде:

await prisma.users.findMany(filter);

Но если условий меньше и вам не нужен этот уровень фильтра, вы можете сделать собственный запрос на основе условия.

api/users?gender=male

      const { gender } = getQueryObjectFromURL();

const filter = {
   where: {}
};


if(gender){
  filter.where.gender = gender; // You might want to check for values before doing this because gender=skdjshdf can be passed
}

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

Если есть много условий ( ), вы знаете, для чего он будет использоваться, поэтому его можно соответствующим образом использовать, скажем, для подготовки И или ИЛИ или настройки, как вы хотите, в зависимости от ваших потребностей.

Другие вопросы по тегам