Призма данных моделирования имеет много и принадлежит - PullRequest
0 голосов
/ 16 декабря 2018

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

  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
        }
    }
}

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

1 Ответ

0 голосов
/ 16 декабря 2018

Согласно документации , директива @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.

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

...