自动将已登录用户的ID添加到KeystoneJS外键字段中
P粉239164234
P粉239164234 2023-09-14 12:23:19
0
1
391

我正在使用KeystoneJS框架提供的文档创建一个应用程序。所以,在我的应用程序中有两个表,一个是用户,另一个是帖子。所以,我想知道,当我通过登录到管理区创建一个帖子时,有一个带有外键列的字段,而且该字段为空,以填充来自用户表的外键值。所以,当我使用KeystoneJS中登录用户的id创建一个新帖子时,我希望系统自动将外键值添加到作者中。

所以,我到处寻找解决方案,但未能找到合适的解决方案。

如果有人对此有任何想法,请回答这个问题,将不胜感激。

谢谢

P粉239164234
P粉239164234

全部回复(1)
P粉949190972

你有没有看过受控博客示例

它有类似于你的项目的列表:PostsUsers,可以是ContributorsModerators。在你的情况下,贡献者/管理员的区别并不重要,你会对Post列表上的钩子感兴趣,特别是resolveInput.create钩子,它看起来像这样:

hooks: {
  resolveInput: {
    create: ({ context, resolvedData }) => {
      resolvedData.createdAt = new Date();
      if (context.session?.contributor) {
        return {
          ...resolvedData,
          createdBy: {
            connect: {
              id: context.session?.contributor?.id,
            },
          },
        };
      }
      return resolvedData;
    },
  },
  // 其他钩子...
},

根据文档

所以这是我们在保存之前更改值的机会,包括填充或强制值,比如你的Post.author字段。

resolveInput获取context对象,其中包括对session对象的引用。该对象的内容由你的会话存储函数决定,但通常包含有关当前用户的信息。在这个示例中,如果登录的用户是贡献者,我们从context.session?.contributor?.id获取他们的贡献者ID,并将其保存到createdBy字段。同时,createdAt字段也设置为当前日期和时间。

请注意,由于此钩子在列表级别配置,因此应返回整个项目的数据(基本上是resolvedData对象和钩子想要进行的任何其他更改)。另一种方法是在字段级别添加resolvedData函数,但这样我们就需要两个单独的函数 - 一个用于createdAt,另一个用于createdBy - 每个函数都会返回一个单一的值。有关此区别的更多信息,请参阅钩子指南

此外,重要的是不要将钩子与访问控制混淆 - 即是否应允许贡献者首先创建帖子。在这个示例中,访问控制是单独配置的,在列表的access配置中。

最后一点 - 在撰写本文时,钩子API文档涵盖了resolveInput钩子(在列表和字段级别),但没有将其分解为不同的操作(即resolveInput.createresolveInput.update)。这只是一种最近的语法改进,它并不改变钩子的使用方式。如果只使用文档中的API,上面的代码可以写成:

hooks: {
  resolveInput: ({ operation, context, resolvedData }) => {
    // 仅对创建操作运行(忽略更新)
    if (operation !== 'create') return resolvedData;
    resolvedData.createdAt = new Date();
    if (context.session?.contributor) {
      return {
        ...resolvedData,
        createdBy: {
          connect: {
            id: context.session?.contributor?.id,
          },
        },
      };
    }
    return resolvedData;
  },
  // 其他钩子...
},
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!