Keystonejs Tutorials #4/Creating relationships
15620 단어 CMS자바스크립트KeystoneJSNode.js
다음 페이지 htps : // 코 m / 혼텐 스즈키 / ms / 7f306f0d6 베d05 아 dc891
Creating relationships
Keystonejs의 tutorials에서 배웁니다. (거의 기계 번역입니다)
htps //w w. 케 ys와 네 js. 코 m / 쓰리 아 ls / 레 치온시 ps
관계 만들기(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에서 작성한 사용자 중 하나를 선택하여 작업을 완료할 책임이 있습니다.
양방향 단일 관계
이제 사용자에게 작업을 할당할 수 있지만 작업에 사용자를 할당할 수는 없습니다. 그래서 User.js에 다음 필드를 추가합니다.
/lists/User.js
task: {
type: Relationship,
ref: 'Todo',
}
이제 관리 패널에서 사용자의 작업을 설정할 수 있습니다.
관리자 등록
mutation {
createUser(data: {
username: "Sato",
email:"[email protected]",
isAdmin:true,
password:"test12345"
}) {
id
}
}
나중에 관리 패널에서 TODO를 등록합니다.
하지만 뭔가 재미! 사용자의 작업을 선택한 다음 이 작업을 확인하면 담당자가 올바르지 않습니다. 그 이유는 두 개의 별도의 한쪽 관계를 만들었기 때문입니다. 우리가 원하는 것은 단일 양면 관계입니다.
(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');
const TodoSchema = require('./lists/Todo.js');
const UserSchema = require('./lists/User.js');
const keystone = new Keystone({
name: 'New Project 3',
adapter: new MongooseAdapter(),
});
keystone.createList('Todo', TodoSchema);
keystone.createList('User', UserSchema);
const authStrategy = keystone.createAuthStrategy({
type: PasswordAuthStrategy,
list: 'User',
});
module.exports = {
keystone,
apps: [new GraphQLApp(),new AdminUIApp({ enableDefaultRoute: true, authStrategy })],
};
lists/Todo.js
const { CalendarDay, Checkbox, Relationship, Text } = require('@keystonejs/fields');
module.exports = {
fields: {
// existing fields
description: {
type: Text,
isRequired: true,
},
isComplete: {
type: Checkbox,
defaultValue: false,
},
// added fields
deadline: {
type: CalendarDay,
format: 'Do MMMM YYYY',
yearRangeFrom: '2019',
yearRangeTo: '2029',
isRequired: false,
defaultValue: new Date().toISOString('YYYY-MM-DD').substring(0, 10),
},
assignee: {
type: Relationship,
ref: 'User',
isRequired: true,
},
},
};
```javascript
</div></details>
<details><summary>lists/User.js </summary><div>
```javascript
const { 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',
},
},
};
이전 페이지 htps : // 코 m / 혼텐 스즈키 / ms / 670c97, f7d0, 55b, b 93
다음 페이지 htps : // 코 m / 혼텐 스즈키 / ms / 7f306f0d6 베d05 아 dc891
Reference
이 문제에 관하여(Keystonejs Tutorials #4/Creating relationships), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/bontensuzuki/items/7cd598a7075f6c970f14
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const { CalendarDay, Checkbox, Relationship, Text } = require('@keystonejs/fields');
assignee: {
type: Relationship,
ref: 'User',
isRequired: true,
task: {
type: Relationship,
ref: 'Todo',
}
mutation {
createUser(data: {
username: "Sato",
email:"[email protected]",
isAdmin:true,
password:"test12345"
}) {
id
}
}
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');
const TodoSchema = require('./lists/Todo.js');
const UserSchema = require('./lists/User.js');
const keystone = new Keystone({
name: 'New Project 3',
adapter: new MongooseAdapter(),
});
keystone.createList('Todo', TodoSchema);
keystone.createList('User', UserSchema);
const authStrategy = keystone.createAuthStrategy({
type: PasswordAuthStrategy,
list: 'User',
});
module.exports = {
keystone,
apps: [new GraphQLApp(),new AdminUIApp({ enableDefaultRoute: true, authStrategy })],
};
const { CalendarDay, Checkbox, Relationship, Text } = require('@keystonejs/fields');
module.exports = {
fields: {
// existing fields
description: {
type: Text,
isRequired: true,
},
isComplete: {
type: Checkbox,
defaultValue: false,
},
// added fields
deadline: {
type: CalendarDay,
format: 'Do MMMM YYYY',
yearRangeFrom: '2019',
yearRangeTo: '2029',
isRequired: false,
defaultValue: new Date().toISOString('YYYY-MM-DD').substring(0, 10),
},
assignee: {
type: Relationship,
ref: 'User',
isRequired: true,
},
},
};
```javascript
</div></details>
<details><summary>lists/User.js </summary><div>
```javascript
const { 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',
},
},
};
Reference
이 문제에 관하여(Keystonejs Tutorials #4/Creating relationships), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/bontensuzuki/items/7cd598a7075f6c970f14텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)