我有一个棱镜数据模型,该数据模型由根类别和子类别组成。一个类别有许多子类别,而一个子类别属于一个类别。我的模型如下:
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
}
}
}
如何查询所有类别并获取其子类别?
答案 0 :(得分:4)
根据the documentation,@relation
指令用于指定关系的两端。
让我们采用以下数据模型:
type User {
postsWritten: [Post!]!
postsLiked: [Post!]!
}
type Post {
author: User!
likes: [User!]!
}
在这里,Post和User之间存在不明确的关系。 Prisma需要知道哪个User字段(postsWritten
?postsLiked
?链接到哪个Post字段(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。这就解释了为什么您可以以一种方式查询而不能以另一种方式查询。