Graphql Prisma数据建模有许多优点,属于
我有一个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
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: