본문 바로가기
CMS

strapi relation type 생성과 사용

by NOMADFISH 2020. 12. 4.

Relation collection type

  • 앞의 strapi field type설명에서 볼 수 있는 것과 같이 collection에 field를 생성할때 Relation타입으로 생성할 수 있다.
  • 기본적으로 DB의 외래키(foreign key)와 비슷한 역할을 한다.
  • 실제로 DB상에 외래키로 잡히는 것은 아니고 A, B Table사이에 참조 field를 정의 하는 A_B 관계 테이블을 실제로 생성하여 두개의 연결 관계를 strapi에서 중계해준다.

To-do subtask Relation

  • 앞의 글에서 task라는 collection을 만들었으니 이어서 subtask라는 collection을 만들고 이를 task에 related field를 하나 만들어 연결해 보도록 하겠다.
    1. 먼저 subtask라는 collection을 생성하고
    2. name, desc라는 text필드를 추가 한후, 저장하여 collection을 생성한다.

 

  • 이제 다시 Task collection을 선택하여 편집한다. 
    1. + 새필드 추가를 누르자
    2. Type은 Relation(관계)를 선택하자

  • 위와 같은 화면을 볼 수 있다.  왼쪽에 현재 Collection이름을 볼 수 있다. 그리고 현재 Collection(Task)에 필드 이름을 무었으로 할지 정할 수 있게 되어 있다. 참고로 필드이름은 오르쪽에 관계 Collection에 따라 알아서 관계를 맺는 Collection이름으로 설정되긴 한다. 물론 마음데로 바꿔도 상관없다.
    1. 오른쪽에서 붉게 표시된 부분을 누르면, 현재 collection과 관계를 설정할 collection 선택할 수 있다. 
    2. subtask를 선택하자( 참고로 자기 자신과도 relation을 맺을 수 있다)
    3. 이제 가운데에서 서로간의 관계를 설정한다. 일단 task가 subtask여러개를 갖는다라는 설정으로 1:N 또는 가장 마지막에 있는 have many관계로 설정한다.
    4. 1:N과 have many의 궁극적인 차이는 1:N에서는 task가 N개의 subtask를 가질 수 있다, subtask도 누가 나를 가졋는지 알수 있다. have many는 task가 N개의 subtask를 가질 수 있다, 단 subtask는 누가 나를 가졋는지 알수 없다.
      • 이 관계를 결국 Rest API를 사용해 보면 알 수 있게 되는데 1:N의 경우 subtask를 GET으로 얻어 오는 경우 subtask를 가진 task도 갖이 가져와 지는 걸 알 수 있는데, have many관계인 경우 그럴게 되지 않는다.
      • 이부분은 나중에 따로 각각의 관계별로 collection들을 생성하고 관계를 맺어서 테스트 하는 강좌를 따로 하겠다. 

To-do subtask TEST

  • 테스트를 해보기 위해서 먼저, subtask에 값을 채워 보자
  • subtask에 Name: subtask1, Desc:subtask1 desc 로 채웠다.

  • 이제 task에서 이 subtask를 연결해 보자,
  • task에 값을 추가하는 것과 동일하다. COLLECTION TYPES에서 Task를 누르자
  • 아래와 같이 이미 이전 강좌에서 추가한 값이 있다. 연필 버튼을 눌러 편집을 해보자

  • 아래와 같이 subtask라는 항목이 생성되어있다.
  • subtask 아래 select 컨트롤를 눌러, 위에 추가한 subtask1을 골라 추가 한후 저장을 누르면 된다.

  • 이제 task-subtask1이라는 관계가 성립되었다.
  • 어제와 마찬가지로 Rest API로 task를 가져와 보자
  • 아래 보는 것과 같이 subtasks 항목에 subtask의 정보를 가져오는 것을 볼 수 있다.
  • 1:N또는 have many이기 때문에 array로 Data가 제공된다.
[
  {
    "id": 1,
    "name": "홍길동",
    "desc": "활빈당 두목",
    "created_by": {
      "id": 1,
      "firstname": "jisu",
      "lastname": "eo",
      "username": null
    },
    "updated_by": {
      "id": 1,
      "firstname": "jisu",
      "lastname": "eo",
      "username": null
    },
    "created_at": "2020-12-02T15:04:49.452Z",
    "updated_at": "2020-12-03T15:25:58.301Z",
    "subtasks": [
      {
        "id": 1,
        "name": "subtask1",
        "desc": "subtask1 desc",
        "created_by": 1,
        "updated_by": 1,
        "created_at": "2020-12-03T15:11:54.287Z",
        "updated_at": "2020-12-03T15:11:54.300Z"
      }
    ]
  }
]

'CMS' 카테고리의 다른 글

str api 에 대하여 (2)  (1) 2020.12.26
strapi API Customizing  (0) 2020.12.15
strapi Collection 생성과 사용  (0) 2020.12.03
strapi collection type 상세  (2) 2020.10.17
strapi collection type추가  (0) 2020.10.12