【问题标题】:Storing additional values on a many-to-many relationship in KeystoneJS在 KeystoneJS 中存储多对多关系的附加值
【发布时间】:2022-01-20 07:08:36
【问题描述】:

我的PostTag 列表之间存在多对多关系,我想记录将标签添加到帖子的日期。在定义这些列表之间的多对多关系时,我看不到如何添加此字段。

这是否意味着我必须手动创建一个与Post 列表具有一对多关系并与Tag 列表具有一对多关系的PostTag 列表?

【问题讨论】:

    标签: keystonejs


    【解决方案1】:

    目前没有向关系本身添加字段的机制(尽管它有come up before)。想法是,如果您需要存储“关于”关系的附加信息,它就不再是纯粹的关系,而是成为一个列表,其中包含字段,就像任何其他的一样。

    这是否意味着我必须手动创建一个列表 POSTTAGSPOST 具有 O2M 关系,并与 TAGS 具有另一个 O2M 关系?

    是的,这是解决问题的一种方法,在大多数情况下可能是最好的方法。缺点是它改变了为帖子添加标签的界面;您现在需要“创建”PostTag 项目,从用户体验的角度来看,这些项目可能更笨重。

    另一个可能的解决方案是保留多对多关系字段,并将额外数据存储在其他地方。例如,您可以在名为taggedDates 的帖子中添加一个json 字段,并使用hooks 来记录创建或销毁链接的时间。请注意,要完成这项工作,您可能需要在 both PostTag 列表上添加一个钩子,因为(取决于字段的配置方式)项目之间的关系可以从任一修改一边。

    大多数情况下,前一种解决方案可能更好,但后者确实可以让您在管理 UI 中保留漂亮的多对多界面,如果这是您的优先考虑的话。


    奖励未来解决方案 - 这对您现在没有帮助,但 there's been talk 添加一个逃生舱口,让开发人员有选择地覆盖生成的 Prisma 架构的一部分。这不是“关系字段”问题的通用解决方案,但如果您真正需要的是创建链接时的时间戳,则此功能可以让您这样做。不幸的是,您需要直接使用context.prisma 来查询值,当然,该功能实际上并不存在(但很有可能它会在接下来的一两个月内登陆)。

    【讨论】:

    • 感谢您的评论
    猜你喜欢
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2020-05-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多