Graphql Prisma数据建模有许多优点,属于

Graphql Prisma数据建模有许多优点,属于,graphql,prisma,plumatic-schema,Graphql,Prisma,Plumatic Schema,我有一个prisma数据模型,它由根类别和子类别组成。一个类别有许多子类别,子类别属于一个类别。我的模型如下所示: type Category { id: ID! @unique createdAt: DateTime! updatedAt: DateTime! name: String! subCategories: [SubCategory!]! @relation(name: "Subcategories") } type SubCat

我有一个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")
  }
type User {
  postsWritten: [Post!]! @relation(name: "AuthorPosts")
  postsLiked: [Post!]! @relation(name: "UserLikes")
}

type Post {
  author: User! @relation(name: "AuthorPosts")
  likes: [User!]! @relation(name: "UserLikes")
}
现在,当我去创建一个新的子类别和通过

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
        }
    }
}
如何查询所有类别并获取其子类别?

根据,使用
@relation
指令指定关系的两端

让我们以以下数据模型为例:

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

type Post {
  author: User!
  likes: [User!]!
}
在这里,我们在Post和User之间有一个模糊的关系。Prisma需要知道哪个用户字段(
postswrited
postsLiked
?)链接到哪个Post字段(
author
喜欢
?)

为了解决这个问题,我们使用
@relationship
,在关系的两端使用一个名称

这将使数据模型如下所示:

  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")
  }
type User {
  postsWritten: [Post!]! @relation(name: "AuthorPosts")
  postsLiked: [Post!]! @relation(name: "UserLikes")
}

type Post {
  author: User! @relation(name: "AuthorPosts")
  likes: [User!]! @relation(name: "UserLikes")
}
因为我们对
postswrited
author
字段使用了相同的名称,Prisma现在可以在数据库中链接这两个字段。同样适用于
postsLiked
likes

总之,数据模型的问题在于在关系中使用了不同的名称。这让Prisma感到困惑,他们认为这是不同的关系。这就解释了为什么您可以用一种方式进行查询,而不能用另一种方式进行查询。

对于Prisma 2.0: