FlutterとParseを使った1対多データオブジェクトの関係構築
15 分
flutterにおける一対多の関係 はじめに parseを使用すると、データオブジェクトを保存し、それらの間に関係を確立できます。この動作をモデル化するために、任意の \<font color="#2166ae">parseobject\</font> を他の \<font color="#2166ae">parseobject\</font> の値として使用できます。内部的に、parseフレームワークは、参照されるオブジェクトを一箇所に保存し、一貫性を維持します。これにより、複雑なクエリを構築および実行する際に追加の力を得ることができます。主な関係のタイプは3つあります \<font color="#2166ae">一対一\</font> , 2つのオブジェクト間に直接的な関係を確立し、それだけを対象とします; \<font color="#2166ae">一対多\</font> , 1つのオブジェクトが多くの他のオブジェクトに関連付けられる場合; \<font color="#2166ae">多対多\</font> , 多くのオブジェクト間に多くの複雑な関係を作成できます。 このガイドでは、実用的なアプリの例を使用して、 \<font color="#2166ae">一対多\</font> の関係がどのように機能するかを詳述します。parseでの \<font color="#2166ae">一対多\</font> の関係を作成する方法は2つあります 最初の方法は、 \<font color="#2166ae">ポインタ\</font> を使用することで、 \<font color="#2166ae">子クラス\</font> , これは作成とクエリの時間が最も速いです。 2つ目の方法は、 \<font color="#2166ae">配列\</font> を使用することで、 \<font color="#2166ae">ポインタ\</font> を親クラスに持たせることができ、サイズによってはクエリ時間が遅くなる可能性があります。このパフォーマンスの問題のため、ポインタの例のみを使用します。 flutterの書籍登録アプリを実装し、parseの \<font color="#2166ae">ポインタ\</font> を使用して関連オブジェクトを作成およびクエリします。 関係は \<font color="#2166ae">一対一\</font> は一般的ではなく、私たちのガイドでは取り上げません。例として、ユーザークラスと、 セキュリティ上の理由 https //blog back4app com/parse server best practices/ のために敏感なユーザーデータを含む別のクラスとの関係があります。( 1 4 ユーザーが他のユーザーの敏感なデータにアクセスできないようにする )。 前提条件 flutter バージョン 2 2 x 以降 https //flutter dev/docs/get started/install android studio https //developer android com/studio または vs code をインストール https //code visualstudio com/ ( プラグイン https //docs flutter dev/get started/editor dart と flutter) back4app 上で 作成されたアプリ https //www back4app com/docs/get started/new parse app 注意 back4app で parse アプリを作成する方法を学ぶには、 新しい parse アプリのチュートリアル https //www back4app com/docs/get started/new parse app に従ってください。 back4app に接続された flutter アプリ。 注意 back4app に接続された flutter プロジェクトを作成するには、 parse sdk を flutter プロジェクトにインストール https //www back4app com/docs/flutter/parse sdk/parse flutter sdk に従ってください。 android または ios を実行しているデバイス(または仮想デバイス)。 ブックアプリの理解 使用する主なオブジェクトクラスは \<font color="#2166ae">book\</font> クラスで、各書籍エントリを登録に保存します。また、これが他の3つのオブジェクトクラスです: \<font color="#2166ae">publisher\</font> 書籍出版社名、 \<font color="#2166ae">book\</font> との一対多の関係; \<font color="#2166ae">genre\</font> 書籍のジャンル、 \<font color="#2166ae">book\</font> との一対多の関係。なお、この例では書籍は1つのジャンルしか持てないと考えます; \<font color="#2166ae">author\</font> 書籍の著者、 \<font color="#2166ae">book\</font> , 書籍は複数の著者を持つことができ、著者も複数の書籍を持つことができます; これらのデータモデルの視覚的表現 各オブジェクトクラス( \<font color="#2166ae">出版社\</font> , \<font color="#2166ae">ジャンル\</font> ) は、文字列型の \<font color="#2166ae">名前\</font> 属性のみを持ち、 \<font color="#2166ae">本\</font> は \<font color="#2166ae">タイトル\</font> と \<font color="#2166ae">年\</font> , 追加のリレーショナル属性を除いて。前のガイドでは、 \<font color="#2166ae">parseobject\</font> の保存と読み取り方法をすでに見てきたので、このガイドでは \<font color="#2166ae">ジャンル\</font> と \<font color="#2166ae">出版社\</font> オブジェクトの保存と読み取り方法は扱いません。 ブックアプリで次の画面が表示されます ジャンルの登録とリスト 出版社の登録とリスト 本の登録 出版社と本のリスト 本の詳細 このガイドの主な焦点は、リレーションを使用してparseとflutterを使用することなので、flutterアプリケーションコードについては説明しません。 1 本アプリテンプレートを作成する まず、本アプリプロジェクトテンプレートを実行しましょう。前のガイドからflutterプロジェクトを開いてください flutter plugin for parse server book flutter app https //github com/templates back4app/flutter associations リポジトリもクローンしてプロジェクトを実行するために利用可能です。 main dart https //github com/templates back4app/flutter associations/blob/master/lib/main dart ファイルをコピーして、前のガイドからの現在のコードを置き換えてください。 注意 関数 \<font color="#2166ae">debug\</font> パラメータが \<font color="#2166ae">parse() initialize\</font> において \<font color="#2166ae">true\</font> , これによりコンソールにparse apiコールを表示できます。この設定はコードのデバッグに役立ちます。リリース版ではデバッグを無効にすることをお勧めします。 ステップ2 テンプレートをback4appプロジェクトに接続する アプリケーションidとクライアントキーの資格情報を見つけるには、アプリのダッシュボードに移動します back4appダッシュボード >アプリ設定 >セキュリティとキー https //www back4app com/docs/parse dashboard/app settings 。 \<font color="#2166ae">main dart\</font> に、back4appのプロジェクトのapplicationidとclientkeyの値を更新します。 keyapplicationid = アプリid keyclientkey = クライアントキー プロジェクトを実行すると、アプリが画像のように読み込まれます。 \<font color="#2166ae">ジャンルを追加\</font> をクリックして、登録および本の登録に使用される \<font color="#2166ae">ジャンル\</font> のリストを表示します。 「 \<font color="#2166ae">出版社を追加\</font> 」をクリックして、登録し、 \<font color="#2166ae">出版社\</font> のリストを表示します。これは書籍の登録に使用されます。 「 \<font color="#2166ae">書籍を追加\</font> 」をクリックして、新しい \<font color="#2166ae">書籍\</font> を登録します。 \<font color="#2166ae">ジャンル\</font> と \<font color="#2166ae">出版社\</font> を使用します。 「 \<font color="#2166ae">出版社/書籍のリスト\</font> 」をクリックして、 \<font color="#2166ae">出版社\</font> と \<font color="#2166ae">書籍\</font> のリストを表示します。 3 書籍オブジェクトとその関係を保存する この関数は、back4appデータベースに関係を持つ新しい書籍を作成します。「 \<font color="#2166ae">dosavebook\</font> 」という関数をファイル「 \<font color="#2166ae">main dart\</font> 」で検索し、 \<font color="#2166ae">future\<void\> dosavebook()\</font> 関数内に以下のコードを挿入します 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( 8 'publisher', 9 (parseobject('publisher') objectid = publisher objectid) 10 topointer()); 11 12 await book save(); この関数を構築するには、次の手順に従ってください 1\ parseの新しいインスタンスを作成します \<font color="#2166ae">book\</font> クラスを次のコマンドで \<font color="#2166ae">parseobject('book')\</font> 2 \<font color="#2166ae">set\</font> 関数を使用して、このオブジェクトのフィールドを設定します。 2 1 \<font color="#2166ae">title\</font> は、テキストコントローラーから値を受け取るテキスト属性です。 2 2 \<font color="#2166ae">genre\</font> は、次の \<font color="#2166ae">parseobject\</font> を定義することで値を受け取ります。 \<font color="#2166ae">objectid\</font> の選択された \<font color="#2166ae">genre\</font> ( parseは保存時にポインタに変換します ) 2 3 \<font color="#2166ae">publisher\</font> は、次の \<font color="#2166ae">parseobject\</font> を定義することで値を受け取ります。 \<font color="#2166ae">objectid\</font> の選択された \<font color="#2166ae">publisher\</font> ( parseに対して、次のように保存することを指定できます。 \<font color="#2166ae">pointer\</font> を使用して \<font color="#2166ae">topointer()\</font> メソッド ) 3 \<font color="#2166ae">save\</font> 関数を \<font color="#2166ae">parseobject\</font> , これにより、オブジェクトがback4appダッシュボードのデータベースに登録されます。 アプリを実行して新しい機能をテストします。 「 \<font color="#2166ae">本を追加\</font> 」ボタンをクリックします。 本の情報を入力します。 アプリでは著者を選択する必要がありますが、そのコードは次のガイドでのみ説明されます。 「 \<font color="#2166ae">本を保存\</font> 」ボタンをクリックします。 新しいオブジェクトがリレーションと共にデータベースに保存されていることを確認するには、 \<font color="#2166ae">back4app dashboard\</font> にアクセスし、 \<font color="#2166ae">book\</font> クラスにアクセスします。 ダッシュボードを使用してbookクラスにアクセスすると、オブジェクトポインタ値をクリックすることで、参照されたオブジェクトにリダイレクトされます。一見無害な機能のように思えますが、これにより手動で検索するよりもデバッグやエラー追跡がはるかに迅速になります。 4 本のリストとその関連オブジェクトをクエリする この関数は、publisherとのリレーションを使用してback4appデータベース内のbooksをクエリします。publisherを通じて、私たちは本のリストを取得します。 ファイル内で関数 \<font color="#2166ae">getbooklist\</font> を検索し、 \<font color="#2166ae">main dart\</font> 内の以下のコードを置き換えます。 \<font color="#2166ae">future\<list\<parseobject\>\> getbooklist(string publisherid)\</font> 関数 1 querybuilder\<parseobject> querybook = 2 querybuilder\<parseobject>(parseobject('book')) 3 whereequalto('publisher', 4 (parseobject('publisher') objectid = publisherid) topointer()) 5 orderbyascending('title'); 6 final parseresponse apiresponse = await querybook query(); 7 8 if (apiresponse success && apiresponse results != null) { 9 return apiresponse results; 10 } else { 11 return \[]; 12 } この関数を構築するには、次の手順に従ってください のインスタンスを作成します \<font color="#2166ae">parsequery\</font> オブジェクトを \<font color="#2166ae">book\</font> クラスのために。クエリに条件を挿入して、 \<font color="#2166ae">books\</font> を検索します \<font color="#2166ae">publisher\</font> フィールドが \<font color="#2166ae">pointer\</font> の \<font color="#2166ae">publisher parseobject\</font> であること。 結果を昇順でソートします \<font color="#2166ae">name\</font> の順序で の検索メソッドを使用してクエリを実行します \<font color="#2166ae">query()\</font> メソッドを使用します。 操作が成功した場合、 \<font color="#2166ae">book\</font> のオブジェクトが返されます。 アプリを実行して新しいクエリをテストします。まず、 \<font color="#2166ae">list publisher/book\</font> ボタンをクリックします。 完了しました! この時点で、あなたはparseでの一対多の関係を作成し、クエリを実行する方法を学びました \<font color="#2166ae">flutter\</font> 。次のガイドでは、多対多の関係を作成し、関連するオブジェクトからデータを返すクエリを実行する方法を示します。