Prisma数据建模有很多且属于

时间:2018-12-16 00:47:30

标签: graphql prisma plumatic-schema

我有一个棱镜数据模型,该数据模型由根类别和子类别组成。一个类别有许多子类别,而一个子类别属于一个类别。我的模型如下:

  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 :(得分:4)

根据the documentation@relation指令用于指定关系的两端

让我们采用以下数据模型:

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

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

在这里,Post和User之间存在不明确的关系。 Prisma需要知道哪个User字段(postsWrittenpostsLiked?链接到哪个Post字段(authorlikes?)

为解决此问题,我们使用@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")
}

由于我们在postsWrittenauthor字段中使用了相同的名称,因此Prisma现在可以在数据库中链接这两个字段。 postsLikedlikes相同。

最后,数据模型的问题在于您在关系中使用了不同的名称。这混淆了认为这是不同关系的Prisma。这就解释了为什么您可以以一种方式查询而不能以另一种方式查询。