サポート > リポジトリ > 親子関係 > 一つの親に複数の子を紐づける

「顧客(customer)」を親モデルとし、「サポート(support)」「購買履歴 (buying)」の二つの子モデルを用意する例を説明します。

外部キーによるモデルの連携は、子を複数指定することができます。顧客モデルを親とし、二つの子「購買履歴」「サポート」モデルを用意した例を図1,2に示します。

図1 親モデルの詳細画面に、複数の子モデルの新規登録ボタンが用意される
図2 子モデルを登録すると(親モデルの詳細画面に)表示される

親モデルにおける表示順

モデルID (英語) の辞書順に並びます。

今回用意した購買履歴モデルとサポートモデルの定義を図3,図4に示します。
外部キーに指定した項目の型は、参照先の項目の型と同じ型で指定します。ここでは「顧客ID」を「数値」型と指定しています。

図3 購買履歴モデルの定義
図4 サポートモデルの定義

「顧客ID」項目には、外部キーの設定を行います。
「外部キー>モデル名」に、親モデルを指定します。

図5 外部キーの定義

「参照先項目名」は、子モデル側の項目が同じ名前の場合、省略できます。(今回は同じ "customerid" としたため、省略することができます。)

図6 外部キーの定義(参照先項目名を省略したとき)

親モデル詳細画面での子モデルは標準ではタブに格納されます。(図1,図2) 子モデルをタブではなく、下図のように縦に並べて表示させることもできます。

図6 複数の子モデルを縦に並べて表示させる

定義方法

子モデルの画面定義を修正します。

「画面 > 検索・一覧表示 > 外部キー連携 > 表示方式 > タブレイアウト」のチェックをはずします。標準では、チェックされています。

図7 タブレイアウトを使う
図8 タブレイアウトを使わない
(今回の例のように)複数の子モデルがある場合、すべての子モデルでタブレイアウトを使うか、使わないかの設定を行ってください。混ぜることは可能ですが、通常はどちらかに統一します。

一つの親モデルに複数の子モデルが紐づく場合、表示順序は「子モデルのモデルIDの辞書順」となります。図9は、問い合わせ(ask)と、サポート(support)というモデルIDの例です。

図9 子モデルaskとsupportの辞書順に並ぶ

この順序を変更することができます。

図10 子モデルの並び順を変更した例

タブレイアウトを利用しない場合も、この表示順序が適用されます。

図11 タブレイアウトを利用しない場合

定義方法

「画面 > 検索・一覧表示 > 外部キー連携」の「タブの表示位置」を次の書式で指定します。

Parent Model ID:Position

一つの子に複数の親を紐づける設定を行なった場合、次のようにコンマで区切って指定することができます。

Parent Model ID:Position,Parent Model ID:Position,...

位置番号は「1」から数えます。

図12 子モデル「サポート」の表示位置を 1 とする
図13 子モデル「問い合わせ」の表示位置を 2 とする
この設定を行う場合は、すべての子モデルについて指定してください。未設定の子モデルが含まれていた場合、未設定が最初に位置づけられます。
位置番号が重複した場合は、最初のルールであるモデルIDの辞書順が適用されます。
Wagby Developer Day 2017