Flutter
...
Data Objects
플러터 SDK에서의 Parse 다대다 관계 구현
11 분
플러터에서의 다대다 관계 소개 이전 가이드에서는 일대다 관계를 사용하는 방법을 배웠고, 프로젝트를 계속 진행할 것입니다 이번 가이드에서는 가장 일반적인 관계인 다대다에 집중할 것입니다 parse에서 다대다 관계를 생성하는 방법은 세 가지가 있습니다 첫 번째는 parse 관계 관계 , 생성 및 쿼리 시간에서 가장 빠릅니다 이번 가이드에서는 이를 사용할 것입니다 두 번째는 배열 배열 을 사용하는 것입니다 포인터 포인터 의 크기에 따라 쿼리 시간이 느려질 수 있습니다 세 번째는 조인 테이블 조인 테이블 을 사용하는 것입니다 고전 데이터베이스의 아이디어에서 출발합니다 다대다 관계가 있을 때, 우리는 양쪽의 모든 objectid objectid 또는 포인터 포인터 를 결합하여 관계가 추적되는 새로운 별도의 테이블을 만듭니다 이번 가이드에서는 parse 다대다 다대다 관계를 플러터 도서 등록 앱에서 구현할 것입니다 관계 관계 를 사용하여 다대다 데이터 관계를 생성하고 쿼리하는 방법, 그리고 back4app과 flutter sdk를 사용하여 관련 객체에서 데이터를 반환하는 쿼리를 수행하는 방법을 배울 것입니다 전제 조건 안드로이드 스튜디오 https //developer android com/studio 또는 vs 코드 설치 ( 플러그인 다트 및 플러터와 함께) 참고 이전 가이드에서 생성된 플러터 앱 이전 가이드를 완료하여 일대다 관계 일대다 관계 클래스에 대한 더 나은 이해를 가질 수 있습니다 안드로이드 또는 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 함수 dosavebook dosavebook 를 파일 main dart main dart , 안에 아래 코드를 넣어 future\<void> dosavebook() future\<void> dosavebook() 함수로 교체합니다 이 함수는 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의 새 인스턴스를 생성합니다 책 책 클래스는 다음 명령으로 생성합니다 parseobject('book') parseobject('book') 2 다음을 사용하십시오 설정 설정 함수를 사용하여 이 객체의 필드를 설정합니다 2 1 제목 제목 는 텍스트 컨트롤러로부터 값을 받는 텍스트 속성입니다 2 2 장르 장르 는 다음을 정의하여 값을 받습니다 parseobject parseobject 와 함께 objectid objectid 의 선택된 장르 장르 ( parse는 저장 시 포인터로 변환됩니다 ) 2 3 출판사 출판사 는 다음을 정의하여 값을 받습니다 parseobject parseobject 의 objectid objectid 선택된 출판사 출판사 ( parse에 대해 우리가 포인터 포인터 로 저장하고 싶다고 지정할 수 있습니다 topointer() topointer() 메서드를 사용하여 ) 2 4 저자 저자 우리는 addrelation addrelation 메서드를 호출합니다 parseobject parseobject , parseobject parseobject 목록을 보내며 objectid objectid 가 선택된 저자 저자 입니다 3 호출하다 저장 저장 함수는 parseobject parseobject , 이는 효과적으로 객체를 back4app 대시보드의 데이터베이스에 등록합니다 앱을 실행하고 새로운 dosavebook() dosavebook() 함수를 테스트하세요 먼저, 대시보드에 접근하여 이전 가이드에서 등록된 책들을 삭제합니다 버튼을 클릭합니다 책 추가 책 추가 저자와 함께 책 정보를 입력합니다 버튼을 클릭합니다 책 저장 책 저장 버튼 새 객체가 관계와 함께 데이터베이스에 저장되었는지 확인하려면 back4app 대시보드 back4app 대시보드 에 접근하고 book book 클래스를 접근하세요 대시보드에서 객체 포인터/관계 값을 클릭하면 참조된 객체 항목으로 이동합니다 이는 무해한 기능처럼 보일 수 있지만, 수동으로 검색하는 것보다 디버깅 및 오류 추적을 훨씬 더 빠르게 만듭니다 3 관계와 함께 책 세부정보 쿼리하기 이 기능은 back4app 데이터베이스에서 책 세부정보를 쿼리하여 관계 데이터를 반환합니다 어떤 상황에서는 하나의 쿼리에서 여러 유형의 관련 객체를 반환하고 싶을 수 있습니다 이는 includeobject includeobject 메서드를 사용하여 수행할 수 있습니다 우리의 예에서는 장르와 출판사 정보를 포함하여 책을 반환하고자 합니다 함수 getbookdetail getbookdetail 을(를) 파일 main dart main dart , 다음으로 getbookdetail(parseobject book) getbookdetail(parseobject book) 함수 내부의 아래 코드를 교체하세요 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 } 이 함수를 만들기 위해 다음 단계를 따르세요 인스턴스를 생성합니다 parsequery parsequery 객체를 위해 book book 클래스 쿼리에 조건을 삽입하여 books books 를 검색합니다 objectid objectid 필드가 선택한 책의 objectid objectid 와 같도록 합니다 우리는 includeobject 메서드를 사용하여, 같은 쿼리에서 반환할 포인터의 필드를 알립니다 장르와 출판사 점 표기법을 사용하여 다단계 includeobject를 수행할 수도 있습니다 예 ` includeobject(\[‘post’, ‘post authors’]); 쿼리의 검색 메서드를 사용하여 query() query() 메서드를 사용합니다 작업이 성공하면, book book 의 객체가 반환됩니다 우리는 get 메서드를 사용하여 데이터를 검색합니다 포인터인 필드는 먼저 포인터를 검색한 다음 그 데이터를 얻어야 합니다 예 bookgenre = book get\<parseobject>('genre') get\<string>('name'); bookgenre = book get\<parseobject>('genre') get\<string>('name'); 처리의 두 번째 단계에서, 우리는 책과 관련된 저자들을 회수해야 합니다 이 기능을 구축하려면 다음 단계를 따르세요 다음의 인스턴스를 생성합니다 parsequery parsequery 객체를 위해 authors authors 클래스 쿼리에 조건을 삽입하고, whererelatedto whererelatedto 연산자를 사용하여 authors authors 와 book book 의 관계를 검색합니다 book book 이 objectid objectid 와 같을 때 다음의 query() query() 메서드를 사용하여 쿼리를 수행합니다 작업이 성공하면 book book 의 객체가 반환됩니다 데이터를 검색하기 위해 get 메서드를 사용합니다 앱을 실행하고 새로운 쿼리를 테스트하세요 먼저, list publisher/book list publisher/book 버튼을 클릭하세요 목록에서 책을 선택하세요 다음 화면에는 책과 그 관계에 대한 데이터가 표시됩니다 완료되었습니다! 이 시점에서, 당신은 다대다 관계를 생성하고 쿼리하는 방법과 parse에서 관련 객체의 데이터를 반환하는 쿼리를 수행하는 방법을 배웠습니다 flutter flutter