Nexus-prisma: заказать вложенные соединения

Как лучше всего поддерживать порядок вложенных объектов в схеме.

Моя схема:

type Article {
  id: ID! @id
  pages: [Page!]!
}

type Page {
  id: ID! @id
}

Вот как я пытаюсь отсортировать страницы (безуспешно):

  updateArticle({
    variables: {
      aricle.id,
      data: {
        pages: {
          connect: reorderPages(aricle.pages)
        }
      }
    }

Резолвер:

 t.field("updateArticle", {
      type: "Article",
      args: {
        id: idArg(),
        data: t.prismaType.updateArticle.args.data
      },
      resolve: (_, { id, data }) => {
        return ctx.prisma.updateArticle({
          where: { id },
          data
        });
      }
    });

Я понимаю, почему этот подход неверен. Я предполагаю, что заказ должен быть записан в базу данных по индексу заказа в таблице соединений. Я не знаю, как это обработать с помощью GraphQL/Nexus/Prisma/MySQL.

Почему вы не используете аргумент orderBy?

Harshit Pant 04.06.2019 16:45

Итак, вы хотите обновить все вложенные объекты с помощью индекса порядка, а затем отсортировать их по порядку?

Tomas Randus 04.06.2019 18:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
2
1 608
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для отношений N:M схема будет выглядеть так:

type Article {
  id: ID! @id
  title: String!
  items: [ArticleItemEdge!]! 
}

type ArticleItemEdge {
  id: ID! @id
  article: Article! @relation(link: INLINE)
  item: Item! @relation(link: INLINE)
  order: Int!
}

type Item {
  id: ID! @id
  title: String!
  articles: [ArticleItemEdge!]!
}

А затем запрашивайте статьи в более «ретрансляционном» режиме, таком как мода, с ребрами и узлами.

query {
  articles {
    items(orderBy: order_ASC) {
      item {
        title
      }
    }
  }
}

А если N:M не нужен, вы можете обновить определение схемы следующим образом:

type Article {
  id: ID! @id
  items: [Item!]!
}

type Item {
  id: ID! @id
  article: Article! @relation(link: INLINE)
  order: Int!
}

^ это превратит таблицы БД в отношение 1:N, а не n:m

Затем вы можете выполнить запрос следующим образом:

query {
  articles {
    id
    items(orderBy: order_ASC) {
      id
    }
  }
}

Обновление значения «заказа» должно быть простым, поэтому я его здесь не привожу.

Надеюсь, это ответит на ваш вопрос!

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