首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GraphCool领域模型设计-- ModifiedBy属性带来的麻烦

GraphCool领域模型设计-- ModifiedBy属性带来的麻烦
EN

Stack Overflow用户
提问于 2017-06-28 17:52:52
回答 1查看 476关注 0票数 2

我正在尝试使用Graphcool为我们的产品设计一个后端。我们已经有了产品的领域模型。

我面临的问题是非标量属性,其中我被迫使用@relation (也就是双向关系)。

帮助我设计以下情况

代码语言:javascript
复制
# projectId: cj4dsyc7ur8cc0142s3hesy1r
# version: 2

type File implements Node {
  contentType: String!
  createdAt: DateTime!
  id: ID! @isUnique
  name: String!
  secret: String! @isUnique
  size: Int!
  updatedAt: DateTime!
  url: String! @isUnique
}

type User implements Node {
  createdAt: DateTime!
  email: String @isUnique
  id: ID! @isUnique
  password: String
  updatedAt: DateTime!
}

type Record implements Node {
  createdAt: DateTime!  
  id: ID! @isUnique
  name: String!
  description: String!
  createdBy: User!
  modifiedBy: User!
}

为此,我得到了错误

代码语言:javascript
复制
Errors
createdBy: The relation field `createdBy` must specify a `@relation` directive: `@relation(name: "MyRelation")`
modifiedBy: The relation field `modifiedBy` must specify a `@relation` directive: `@relation(name: "MyRelation")`

然后,当我试图添加关系时,我被迫执行以下操作

代码语言:javascript
复制
# projectId: cj4dsyc7ur8cc0142s3hesy1r
# version: 2

type File implements Node {
  contentType: String!
  createdAt: DateTime!
  id: ID! @isUnique
  name: String!
  secret: String! @isUnique
  size: Int!
  updatedAt: DateTime!
  url: String! @isUnique
}

type User implements Node {
  createdAt: DateTime!
  email: String @isUnique
  id: ID! @isUnique
  password: String
  updatedAt: DateTime!
}

type Record implements Node {
  createdAt: DateTime!  
  id: ID! @isUnique
  name: String!
  description: String!
  createdBy: User! @relation(name: "createdBy")
  modifiedBy: User! @relation(name: "modifiedBy")
}

这将导致以下错误

代码语言:javascript
复制
Errors
createdBy: A relation directive with a name must appear exactly 2 times.
modifiedBy: A relation directive with a name must appear exactly 2 times.

我理解每一个非标量输出图形酷期待建立一个双向关系。但是,考虑到modifiedBy和createdBy (用户)的用例,我不能为我添加的每个实体在用户对象上建立关系。

在GraphCool上做这件事的更好的方法是什么?

另外,为什么这个限制是由GraphCool提出的,GraphQL没有规定这个限制?

干杯,罗希特

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-28 18:36:54

谢谢你使用图形酷!

首先要做的是。正如您所指出的,图形酷在您想连接类型时强制执行双向关系。在某些情况下,您预先知道您只想在一个方向查询数据,因此,您必须创建一个双向关系似乎是不直观的。

造成这种情况的原因是允许您根据数据的结构简洁地指定权限规则。在您的情况下,您可能需要指定只允许post的创建者删除记录。

实际上,在实现权限规则时,常常需要反向关系。实施双向关系使整个编程模型更容易理解,并使您能够轻松地实现权限规则。

对于您的模式,解决方案是按以下方式扩展用户类型:

代码语言:javascript
复制
type User implements Node {
  createdAt: DateTime!
  email: String @isUnique
  id: ID! @isUnique
  password: String
  updatedAt: DateTime!
  createdRecords: [Record!]! @relation(name: "CreatedBy")
  modifiedRecords: [Record!]! @relation(name: "UpdatedBy")
}

(请注意,关系名称必须以大写字母开头)

希望这有帮助:)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44809470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档