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