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