Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8936

Keystonejs Tutorials #4/Creating relationships

$
0
0

前ページ https://qiita.com/bontensuzuki/items/670c97af7d0e55bbfe93
次ページ https://qiita.com/bontensuzuki/items/7f306f0d6bed05adc891

Creating relationships

Keystonejsのtutorialsから学んでいきます。(ほとんど機械翻訳です)
https://www.keystonejs.com/tutorials/relationships

関係を作る(Creating relationships)

1 新しいプロジェクトを作成する
2 リストを追加する

単一の関係(To-single relationship)

関係を設定して、TodoリストとUserリストをリンクします。 Todo.jsの担当者フィールドを調整して、次のコードと一致させます。

Import the Relationship field:
/lists/Todo.js

const{CalendarDay,Checkbox,Relationship,Text}=require('@keystonejs/fields');

フィールドタイプを[Text]から[Relationship]に更新し、フィールドが関連付けられているリストを指すrefを設定します。

assignee:{type:Relationship,ref:'User',isRequired:true,

refオプションは、関連するリストを定義します。オプションに割り当てられる名前は、createListに渡される名前と同じです。Admin UIで、作成したユーザーの1人を選択して、タスクを完了する責任を持たせることができます。

双方向の単一関係(Two-way to-single relationship)

ユーザーにタスクを割り当てることができるようになりましたが、タスクにユーザーを割り当てることはできません。そこでUser.jsに次のフィールドを追加します。

/lists/User.js

task:{type:Relationship,ref:'Todo',}

これで、管理パネルからユーザーのタスクを設定できます。
管理者を登録します

mutation{createUser(data:{username:"Sato",email:"test@test.test",isAdmin:true,password:"test12345"}){id}}

このあとで管理パネルでTODOを登録します

しかし、何かがおかしい!ユーザーのタスクを選択してからこのタスクを確認すると、担当者が正しくありません。これは、2つの別々の片側関係を作成したためです。私たちが望むのは、単一の両面関係です。

スクリーンショット 2020-05-04 11.05.21.png

(Assigneeの欄がUserIdで表示されています...)

index.js
const{Keystone}=require('@keystonejs/keystone');const{MongooseAdapter}=require('@keystonejs/adapter-mongoose');const{PasswordAuthStrategy}=require('@keystonejs/auth-password');const{GraphQLApp}=require('@keystonejs/app-graphql');const{AdminUIApp}=require('@keystonejs/app-admin-ui');const{Text,CalendarDay,Checkbox,Password}=require('@keystonejs/fields');constTodoSchema=require('./lists/Todo.js');constUserSchema=require('./lists/User.js');constkeystone=newKeystone({name:'New Project 3',adapter:newMongooseAdapter(),});keystone.createList('Todo',TodoSchema);keystone.createList('User',UserSchema);constauthStrategy=keystone.createAuthStrategy({type:PasswordAuthStrategy,list:'User',});module.exports={keystone,apps:[newGraphQLApp(),newAdminUIApp({enableDefaultRoute:true,authStrategy})],};


lists/Todo.js
const{CalendarDay,Checkbox,Relationship,Text}=require('@keystonejs/fields');module.exports={fields:{// existing fieldsdescription:{type:Text,isRequired:true,},isComplete:{type:Checkbox,defaultValue:false,},// added fieldsdeadline:{type:CalendarDay,format:'Do MMMM YYYY',yearRangeFrom:'2019',yearRangeTo:'2029',isRequired:false,defaultValue:newDate().toISOString('YYYY-MM-DD').substring(0,10),},assignee:{type:Relationship,ref:'User',isRequired:true,},},};```javascript

</div></details>
<details><summary>lists/User.js </summary><div>

```javascriptconst{Text,Password,Checkbox,Relationship}=require('@keystonejs/fields');module.exports={fields:{username:{type:Text,isRequired:true,},email:{type:Text,isUnique:true,},isAdmin:{type:Checkbox},password:{type:Password,isRequired:true,},task:{type:Relationship,ref:'Todo',},},};

前ページ https://qiita.com/bontensuzuki/items/670c97af7d0e55bbfe93
次ページ https://qiita.com/bontensuzuki/items/7f306f0d6bed05adc891


Viewing all articles
Browse latest Browse all 8936

Trending Articles