Keystonejs Tutorials #4/Creating relationships

이전 페이지 htps : // 코 m / 혼텐 스즈키 / ms / 670c97, f7d0, 55b, b 93
다음 페이지 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

좋은 웹페이지 즐겨찾기