KeystoneJS フレームワークによって提供されるドキュメントを使用してアプリケーションを作成しています。したがって、私のアプリケーションには 2 つのテーブルがあり、1 つは users で、もう 1 つは posts です。それで、管理領域にログインして投稿を作成すると、外部キー列のあるフィールドがあり、そのフィールドは空で、ユーザーテーブルの外部キー値が入力されるのではないかと思います。したがって、KeystoneJS でログインしているユーザーの ID を使用して新しい投稿を作成するとき、システムが自動的に外部キー値を author に追加するようにしたいと考えています。
そこで、解決策を探してあちこち探しましたが、適切な解決策を見つけることができませんでした。
何かご意見がございましたら、ご回答いただければ幸いです。
######ありがとう######
管理されたブログの例をご覧になりましたか?
これには、プロジェクトと同様のリストがあります:
リーリーPosts
およびUsers
(Contributors
またはModerators
)。あなたの場合、投稿者/管理者の区別は重要ではありません。Post
リストのフック、特にresolveInput.create
hook に興味があるでしょう。次のようになります:ドキュメントによると :
したがって、保存する前に値を変更する機会です。これには、Post.author
フィールドのような値を入力したり強制したりすることも含まれます。
resolveInput
このフックはリスト レベルで構成されているため、項目のデータ全体 (基本的には#session オブジェクトへの参照を含む
context オブジェクト
を取得します。このオブジェクトの内容は、
セッション ストレージ関数によって決定されますが、通常は現在のユーザーに関する情報が含まれています。この例では、ログインしているユーザーが貢献者の場合、context.session?.contributor?.idからその貢献者 ID を取得し、それを
createdByフィールドに保存します。同時に、
createdAtフィールドも現在の日付と時刻に設定されます。
resolvedData
アクセス制御オブジェクトとフックが必要とするその他の変更) を返す必要があることに注意してください。別の方法としては、フィールド レベルで
resolvedData関数を追加する方法がありますが、その場合は 2 つの別々の関数が必要になります。1 つは
createdAt用、もう 1 つは
createdBy## 用です。 # - Every関数は単一の値を返します。この区別の詳細については、フック ガイド
を参照してください。 さらに、フックと- つまり、そもそも投稿者に投稿の作成を許可するかどうかを混同しないことが重要です。この例では、アクセス制御はリストの access 構成で個別に構成されます。
最後の注意 - 執筆時点では、
フック API ドキュメントでは resolveInput フック (リスト レベルとフィールド レベルの両方) について説明していますが、それらをさまざまな操作に分割していません (つまり
resolveInput.create
とresolveInput.update
)。これは最近の構文の改良にすぎず、フックの使用方法は変わりません。ドキュメント内で API のみを使用する場合、上記のコードは次のように記述できます:リーリー