Flutter
...
Data Objects
FlutterでのParseを使った多対多データ関係の実装方法
10 分
flutterにおける多対多の関係 はじめに 前回のガイドでは、一対多の関係の使い方を学び、プロジェクトを続けます。このガイドでは、最も一般的な関係である多対多に焦点を当てます。parseで多対多の関係を作成する方法は3つあります。 最初は、parseの relations relations , これは作成とクエリの時間が最も速いです。このガイドではこれを使用します。 2つ目は、 arrays arrays の pointers pointers を使用することで、サイズによってはクエリの時間が遅くなる可能性があります。 3つ目は、 jointable jointable を使用することで、これは古典的なデータベースのアイデアです。多対多の関係がある場合、両側のすべての objectid objectid または pointer pointer を組み合わせて、新しい別のテーブルを作成し、その中で関係を追跡します。 このガイドでは、flutterの書籍登録アプリで 多対多 多対多 の関係をparseの relations relations を使用して実装します。多対多のデータ関係を作成し、関連するオブジェクトからデータを返すクエリを実行する方法を学びます。back4appとflutter sdkを使用します。 前提条件 android studio https //developer android com/studio または vs codeをインストール ( プラグイン dartとflutterを使用) 注意 前のガイドで作成したflutterアプリ 前のガイドを完了して、 一対多の関係 一対多の関係 クラスについてより良い理解を得てください androidまたはiosを実行しているデバイス(または仮想デバイス)。 1 ブックアプリテンプレートを実行する 前のガイドを完了していない場合は、私たちのリポジトリから完全な ブックflutterアプリ 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の新しいインスタンスを作成する book book クラスを次のコマンドで 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データベースで書籍の詳細をクエリし、関係データを返します。場合によっては、1つのクエリで複数の種類の関連オブジェクトを返したいことがあります。これを行うには、 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'); 処理の第二段階では、bookに関連付けられた著者を回収する必要があります。 この機能を構築するには、次の手順に従ってください のインスタンスを作成します 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 で。