【发布时间】:2022-01-20 07:08:36
【问题描述】:
我的Post 和Tag 列表之间存在多对多关系,我想记录将标签添加到帖子的日期。在定义这些列表之间的多对多关系时,我看不到如何添加此字段。
这是否意味着我必须手动创建一个与Post 列表具有一对多关系并与Tag 列表具有一对多关系的PostTag 列表?
【问题讨论】:
标签: keystonejs
我的Post 和Tag 列表之间存在多对多关系,我想记录将标签添加到帖子的日期。在定义这些列表之间的多对多关系时,我看不到如何添加此字段。
这是否意味着我必须手动创建一个与Post 列表具有一对多关系并与Tag 列表具有一对多关系的PostTag 列表?
【问题讨论】:
标签: keystonejs
目前没有向关系本身添加字段的机制(尽管它有come up before)。想法是,如果您需要存储“关于”关系的附加信息,它就不再是纯粹的关系,而是成为一个列表,其中包含字段,就像任何其他的一样。
这是否意味着我必须手动创建一个列表
POSTTAGS与POST具有 O2M 关系,并与TAGS具有另一个 O2M 关系?
是的,这是解决问题的一种方法,在大多数情况下可能是最好的方法。缺点是它改变了为帖子添加标签的界面;您现在需要“创建”PostTag 项目,从用户体验的角度来看,这些项目可能更笨重。
另一个可能的解决方案是保留多对多关系字段,并将额外数据存储在其他地方。例如,您可以在名为taggedDates 的帖子中添加一个json 字段,并使用hooks 来记录创建或销毁链接的时间。请注意,要完成这项工作,您可能需要在 both Post 和 Tag 列表上添加一个钩子,因为(取决于字段的配置方式)项目之间的关系可以从任一修改一边。
大多数情况下,前一种解决方案可能更好,但后者确实可以让您在管理 UI 中保留漂亮的多对多界面,如果这是您的优先考虑的话。
奖励未来解决方案 - 这对您现在没有帮助,但 there's been talk 添加一个逃生舱口,让开发人员有选择地覆盖生成的 Prisma 架构的一部分。这不是“关系字段”问题的通用解决方案,但如果您真正需要的是创建链接时的时间戳,则此功能可以让您这样做。不幸的是,您需要直接使用context.prisma 来查询值,当然,该功能实际上并不存在(但很有可能它会在接下来的一两个月内登陆)。
【讨论】: