Упорядочение по нескольким столбцам в Prisma

#prisma #prisma-graphql

#prisma #prisma-graphql

Вопрос:

Я знаю, что в настоящее время Prisma не поддерживает упорядочение по нескольким скалярным полям (см. Этот выпуск:https://github.com/prisma/prisma/issues/62). Но мне интересно, есть ли кто-нибудь, кто нашел решение для решения этой проблемы без использования мутации executeRaw (raw SQL), потому что у меня есть много мест в моем коде, где мне нужно упорядочивать по нескольким полям, и я не хочу использовать executeRaw во многих местах. Я буду признателен за любые предложения. Спасибо!

Ответ №1:

Начиная с Prisma 2.4, это должно быть в принципе возможно с помощью array в OrderBy:

 const users = await prisma.user.findMany({
   select: {
      email: true,
      role: true,
   },
   orderBy: [
      {
         email: 'desc',
      },
      {
         role: 'desc',
      }
   ],
})
  

Найти больше в документах: https://www.prisma.io/docs/reference/api-reference/prisma-client-reference#sort-user-by-multiple-fields—email-and-role

Комментарии:

1. Хорошо, но как мне написать ... ORDER BY (foo = 1) DESC, bar ASC, foo ASC, baz ASC; ?

2. Что вы подразумеваете под (foo = 1)?

3. Я хочу, чтобы строки, где foo равно 1, были отсортированы перед остальными. В SQL вы можете сделать это так, как я это написал.

Ответ №2:

Я не думаю, что есть решение, в моем проекте мне нужен случайный порядок, увеличение / уменьшение, агрегирование… используйте raw, наконец.