Моделирование данных Prisma имеет множество

У меня есть модель данных призмы, которая состоит из корневой категории и подкатегории. Категория имеет много подкатегорий, а подкатегория принадлежит одной категории. Моя модель выглядит так:

  type Category {
    id: ID! @unique
    createdAt: DateTime!
    updatedAt: DateTime!
    name: String!
    subCategories: [SubCategory!]! @relation(name: "Subcategories")
  }

  type SubCategory {
    id: ID! @unique
    createdAt: DateTime!
    updatedAt: DateTime!
    name: String!
    category: Category! @relation(name: "ParentCategory")

    cards: [Card!]! @relation(name: "SubCategoryCards") #Category @relation(name: "CardCategory")
  }

Теперь, когда я перехожу к созданию новой подкатегории и через

mutation {
    createSubCategory(data:{
        name:"This is a test"
        category:{
            connect:{
                id:"cjp4tyy8z01a6093756xxb04i"
            }
        }
    }){
        id
        category{
            name
            id
        }
    }
}

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

{
    subCategories{
        id
        name
        category{
            id
            name
        }
    }
}

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

{
    categories{
        id
        name
        subCategories{
            id
            name
        }
    }
}

Как я могу запросить все категории и получить их подкатегории?


person Dan Ramos    schedule 16.12.2018    source источник


Ответы (1)


Согласно документации, директива @relation используется для указания обоих концов отношения.

Возьмем следующую модель данных:

type User {
  postsWritten: [Post!]!
  postsLiked: [Post!]!
}

type Post {
  author: User!
  likes: [User!]!
}

Здесь у нас неоднозначная связь между публикацией и пользователем. Prisma необходимо знать, какое поле пользователя (postsWritten? postsLiked?) Связать с каким полем сообщения (author? likes?)

Чтобы решить эту проблему, мы используем @relation с именем, используемым в обоих концах отношения.

Это сделает модель данных такой:

type User {
  postsWritten: [Post!]! @relation(name: "AuthorPosts")
  postsLiked: [Post!]! @relation(name: "UserLikes")
}

type Post {
  author: User! @relation(name: "AuthorPosts")
  likes: [User!]! @relation(name: "UserLikes")
}

Поскольку мы использовали одно и то же имя для полей postsWritten и author, Prisma теперь может связать эти два поля в базе данных. То же самое для postsLiked и likes.

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

person Errorname    schedule 16.12.2018
comment
Для Prisma 2.0: prisma.io/docs/reference / tools-and-interfaces / prisma-schema / - person Joe; 19.06.2020