플러터 SDK에서의 Parse 다대다 관계 구현
11 분
플러터에서의 다대다 관계 소개 이전 가이드에서는 일대다 관계를 사용하는 방법을 배웠고, 프로젝트를 계속 진행할 것입니다 이번 가이드에서는 가장 일반적인 관계인 다대다에 집중할 것입니다 parse에서 다대다 관계를 생성하는 방법은 세 가지가 있습니다 첫 번째는 parse \<font color="#2166ae">관계\</font> , 생성 및 쿼리 시간에서 가장 빠릅니다 이번 가이드에서는 이를 사용할 것입니다 두 번째는 \<font color="#2166ae">배열\</font> 을 사용하는 것입니다 \<font color="#2166ae">포인터\</font> 의 크기에 따라 쿼리 시간이 느려질 수 있습니다 세 번째는 \<font color="#2166ae">조인 테이블\</font> 을 사용하는 것입니다 고전 데이터베이스의 아이디어에서 출발합니다 다대다 관계가 있을 때, 우리는 양쪽의 모든 \<font color="#2166ae">objectid\</font> 또는 \<font color="#2166ae">포인터\</font> 를 결합하여 관계가 추적되는 새로운 별도의 테이블을 만듭니다 이번 가이드에서는 parse \<font color="#2166ae">다대다\</font> 관계를 플러터 도서 등록 앱에서 구현할 것입니다 \<font color="#2166ae">관계\</font> 를 사용하여 다대다 데이터 관계를 생성하고 쿼리하는 방법, 그리고 back4app과 flutter sdk를 사용하여 관련 객체에서 데이터를 반환하는 쿼리를 수행하는 방법을 배울 것입니다 전제 조건 안드로이드 스튜디오 https //developer android com/studio 또는 vs 코드 설치 https //code visualstudio com/ ( 플러그인 https //docs flutter dev/get started/editor 다트 및 플러터와 함께) 참고 이전 가이드에서 생성된 플러터 앱 이전 가이드를 완료하여 \<font color="#2166ae">일대다 관계\</font> 클래스에 대한 더 나은 이해를 가질 수 있습니다 안드로이드 또는 ios를 실행하는 장치(또는 가상 장치) 1 도서 앱 템플릿 실행 이전 가이드를 완료하지 않았다면, 우리 저장소에서 전체 도서 플러터 앱 https //github com/templates back4app/flutter associations 프로젝트를 클론하고 실행할 수 있습니다 또한 이전 가이드 https //www back4app com/docs/flutter/parse sdk/data objects/%7bsite baseurl%7d%7d//flutter/parse sdk/data objects/flutter one to many relationship 를 살펴보아 앱 템플릿을 더 잘 이해할 수 있습니다 아래에서 도서 등록 데이터 모델의 시각적 표현을 찾을 수 있습니다 2 책 객체와 저자를 저장하기 이전 가이드에서 flutter 프로젝트를 엽니다 flutter의 일대다 관계 https //www back4app com/docs//flutter/parse sdk/data objects/flutter one to many relationship 함수 \<font color="#2166ae">dosavebook\</font> 를 파일 \<font color="#2166ae">main dart\</font> , 안에 아래 코드를 넣어 \<font color="#2166ae">future\<void\> dosavebook()\</font> 함수로 교체합니다 이 함수는 back4app 데이터 저장소에 관계가 있는 새로운 책을 생성합니다 1 final book = parseobject('book') 2 set('title', controllertitle text trim()) 3 set('year', int parse(controlleryear text trim())) 4 //the objectid will be converted to a pointer on the save() method 5 set('genre', parseobject('genre') objectid = genre objectid) 6 //you can also convert to a pointer object before the saving using the topointer() method 7 set('publisher', 8 (parseobject('publisher') objectid = publisher objectid) topointer()) 9 //saving a list of authors for the book 10 addrelation( 11 'authors', 12 authors 13 map((o) => parseobject('author') objectid = o objectid) 14 tolist()); 15 16 await book save(); 이 함수를 만들기 위해 다음 단계를 따르세요 1\ parse의 새 인스턴스를 생성합니다 \<font color="#2166ae">책\</font> 클래스는 다음 명령으로 생성합니다 \<font color="#2166ae">parseobject('book')\</font> 2 다음을 사용하십시오 \<font color="#2166ae">설정\</font> 함수를 사용하여 이 객체의 필드를 설정합니다 2 1 \<font color="#2166ae">제목\</font> 는 텍스트 컨트롤러로부터 값을 받는 텍스트 속성입니다 2 2 \<font color="#2166ae">장르\</font> 는 다음을 정의하여 값을 받습니다 \<font color="#2166ae">parseobject\</font> 와 함께 \<font color="#2166ae">objectid\</font> 의 선택된 \<font color="#2166ae">장르\</font> ( parse는 저장 시 포인터로 변환됩니다 ) 2 3 \<font color="#2166ae">출판사\</font> 는 다음을 정의하여 값을 받습니다 \<font color="#2166ae">parseobject\</font> 의 \<font color="#2166ae">objectid\</font> 선택된 \<font color="#2166ae">출판사\</font> ( parse에 대해 우리가 \<font color="#2166ae">포인터\</font> 로 저장하고 싶다고 지정할 수 있습니다 \<font color="#2166ae">topointer()\</font> 메서드를 사용하여 ) 2 4 \<font color="#2166ae">저자\</font> 우리는 \<font color="#2166ae">addrelation\</font> 메서드를 호출합니다 \<font color="#2166ae">parseobject\</font> , \<font color="#2166ae">parseobject\</font> 목록을 보내며 \<font color="#2166ae">objectid\</font> 가 선택된 \<font color="#2166ae">저자\</font> 입니다 3 호출하다 \<font color="#2166ae">저장\</font> 함수는 \<font color="#2166ae">parseobject\</font> , 이는 효과적으로 객체를 back4app 대시보드의 데이터베이스에 등록합니다 앱을 실행하고 새로운 \<font color="#2166ae">dosavebook()\</font> 함수를 테스트하세요 먼저, 대시보드에 접근하여 이전 가이드에서 등록된 책들을 삭제합니다 버튼을 클릭합니다 \<font color="#2166ae">책 추가\</font> 저자와 함께 책 정보를 입력합니다 버튼을 클릭합니다 \<font color="#2166ae">책 저장\</font> 버튼 새 객체가 관계와 함께 데이터베이스에 저장되었는지 확인하려면 \<font color="#2166ae">back4app 대시보드\</font> 에 접근하고 \<font color="#2166ae">book\</font> 클래스를 접근하세요 대시보드에서 객체 포인터/관계 값을 클릭하면 참조된 객체 항목으로 이동합니다 이는 무해한 기능처럼 보일 수 있지만, 수동으로 검색하는 것보다 디버깅 및 오류 추적을 훨씬 더 빠르게 만듭니다 3 관계와 함께 책 세부정보 쿼리하기 이 기능은 back4app 데이터베이스에서 책 세부정보를 쿼리하여 관계 데이터를 반환합니다 어떤 상황에서는 하나의 쿼리에서 여러 유형의 관련 객체를 반환하고 싶을 수 있습니다 이는 \<font color="#2166ae">includeobject\</font> 메서드를 사용하여 수행할 수 있습니다 우리의 예에서는 장르와 출판사 정보를 포함하여 책을 반환하고자 합니다 함수 \<font color="#2166ae">getbookdetail\</font> 을(를) 파일 \<font color="#2166ae">main dart\</font> , 다음으로 \<font color="#2166ae">getbookdetail(parseobject book)\</font> 함수 내부의 아래 코드를 교체하세요 1 querybuilder\<parseobject> querybook = 2 querybuilder\<parseobject>(parseobject('book')) 3 whereequalto('objectid', book objectid) 4 includeobject(\['publisher', 'genre']); 5 6 final parseresponse responsebook = await querybook query(); 7 8 if (responsebook success && responsebook results != null) { 9 final book = (responsebook results first) as parseobject; 10 booktitle = book get\<string>('title'); 11 bookyear = book get\<int>('year'); 12 bookgenre = book get\<parseobject>('genre') get\<string>('name'); 13 bookpublisher = book get\<parseobject>('publisher') get\<string>('name'); 14 loadeddata = true; 15 } 16 17 querybuilder\<parseobject> queryauthors = 18 querybuilder\<parseobject>(parseobject('author')) 19 whererelatedto('authors', 'book', book objectid); 20 21 final parseresponse responseauthors = await queryauthors query(); 22 23 if (responseauthors success && responseauthors results != null) { 24 bookauthors = responseauthors results 25 map((e) => (e as parseobject) get\<string>('name')) 26 tolist(); 27 } 이 함수를 만들기 위해 다음 단계를 따르세요 인스턴스를 생성합니다 \<font color="#2166ae">parsequery\</font> 객체를 위해 \<font color="#2166ae">book\</font> 클래스 쿼리에 조건을 삽입하여 \<font color="#2166ae">books\</font> 를 검색합니다 \<font color="#2166ae">objectid\</font> 필드가 선택한 책의 \<font color="#2166ae">objectid\</font> 와 같도록 합니다 우리는 includeobject 메서드를 사용하여, 같은 쿼리에서 반환할 포인터의 필드를 알립니다 장르와 출판사 점 표기법을 사용하여 다단계 includeobject를 수행할 수도 있습니다 예 ` includeobject(\[‘post’, ‘post authors’]); 쿼리의 검색 메서드를 사용하여 \<font color="#2166ae">query()\</font> 메서드를 사용합니다 작업이 성공하면, \<font color="#2166ae">book\</font> 의 객체가 반환됩니다 우리는 get 메서드를 사용하여 데이터를 검색합니다 포인터인 필드는 먼저 포인터를 검색한 다음 그 데이터를 얻어야 합니다 예 \<font color="#2166ae">bookgenre = book get\<parseobject\>('genre') get\<string\>('name');\</font> 처리의 두 번째 단계에서, 우리는 책과 관련된 저자들을 회수해야 합니다 이 기능을 구축하려면 다음 단계를 따르세요 다음의 인스턴스를 생성합니다 \<font color="#2166ae">parsequery\</font> 객체를 위해 \<font color="#2166ae">authors\</font> 클래스 쿼리에 조건을 삽입하고, \<font color="#2166ae">whererelatedto\</font> 연산자를 사용하여 \<font color="#2166ae">authors\</font> 와 \<font color="#2166ae">book\</font> 의 관계를 검색합니다 \<font color="#2166ae">book\</font> 이 \<font color="#2166ae">objectid\</font> 와 같을 때 다음의 \<font color="#2166ae">query()\</font> 메서드를 사용하여 쿼리를 수행합니다 작업이 성공하면 \<font color="#2166ae">book\</font> 의 객체가 반환됩니다 데이터를 검색하기 위해 get 메서드를 사용합니다 앱을 실행하고 새로운 쿼리를 테스트하세요 먼저, \<font color="#2166ae">list publisher/book\</font> 버튼을 클릭하세요 목록에서 책을 선택하세요 다음 화면에는 책과 그 관계에 대한 데이터가 표시됩니다 완료되었습니다! 이 시점에서, 당신은 다대다 관계를 생성하고 쿼리하는 방법과 parse에서 관련 객체의 데이터를 반환하는 쿼리를 수행하는 방법을 배웠습니다 \<font color="#2166ae">flutter\</font>