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.

0 ответов

Для отношений 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
    }
  }
}

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

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

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