Ich erstelle eine Anwendung unter Verwendung der vom KeystoneJS-Framework bereitgestellten Dokumentation. In meiner App habe ich also zwei Tabellen, eine ist Benutzer und die andere ist Beiträge. Ich frage mich also: Wenn ich einen Beitrag erstelle, indem ich mich im Admin-Bereich anmelde, gibt es ein Feld mit einer Fremdschlüsselspalte, und dieses Feld ist leer, um mit dem Fremdschlüsselwert aus der Benutzertabelle gefüllt zu werden. Wenn ich also einen neuen Beitrag mit der ID des angemeldeten Benutzers in KeystoneJS erstelle, möchte ich, dass das System den Fremdschlüsselwert automatisch zum Autor hinzufügt.
Also habe ich überall nach einer Lösung gesucht, aber keine passende gefunden.
Wenn jemand eine Idee dazu hat, wäre er sehr dankbar, wenn er diese Frage beantworten könnte.
Danke
你有没有看过受控博客示例?
它有类似于你的项目的列表:
Posts
和Users
,可以是Contributors
或Moderators
。在你的情况下,贡献者/管理员的区别并不重要,你会对Post
列表上的钩子感兴趣,特别是resolveInput.create
钩子,它看起来像这样:根据文档:
所以这是我们在保存之前更改值的机会,包括填充或强制值,比如你的
Post.author
字段。resolveInput
获取context
对象,其中包括对session
对象的引用。该对象的内容由你的会话存储函数决定,但通常包含有关当前用户的信息。在这个示例中,如果登录的用户是贡献者,我们从context.session?.contributor?.id
获取他们的贡献者ID,并将其保存到createdBy
字段。同时,createdAt
字段也设置为当前日期和时间。请注意,由于此钩子在列表级别配置,因此应返回整个项目的数据(基本上是
resolvedData
对象和钩子想要进行的任何其他更改)。另一种方法是在字段级别添加resolvedData
函数,但这样我们就需要两个单独的函数 - 一个用于createdAt
,另一个用于createdBy
- 每个函数都会返回一个单一的值。有关此区别的更多信息,请参阅钩子指南。此外,重要的是不要将钩子与访问控制混淆 - 即是否应允许贡献者首先创建帖子。在这个示例中,访问控制是单独配置的,在列表的
access
配置中。最后一点 - 在撰写本文时,钩子API文档涵盖了
resolveInput
钩子(在列表和字段级别),但没有将其分解为不同的操作(即resolveInput.create
和resolveInput.update
)。这只是一种最近的语法改进,它并不改变钩子的使用方式。如果只使用文档中的API,上面的代码可以写成: