親子関係を定義する

最終更新日: 2021年6月11日
R8 | R9

ここでは「顧客(customer)」と「サポート(support)」という2つのモデルをとりあげてみます。

顧客のデータを新規に登録します。
顧客の詳細表示画面に「サポート新規作成」ボタンが用意されています。(図1) 外部キーの関係にあるサポートモデルの新規登録は、対象データ(ここでは顧客データ)の詳細表示画面から行います。

図1 顧客詳細表示画面

「サポート新規作成」ボタンをクリックし、サポート新規登録画面を開いてみます。顧客ID(紐づく親モデルのID)は自動設定されています。

図2 サポート新規登録画面

各項目を入力して登録を行います。サポート詳細表示画面から顧客モデルへ戻るための「顧客 一覧表示」「顧客 詳細表示」ボタンが用意されています。

図3 サポート詳細表示画面

「顧客 詳細表示」ボタンをクリックして顧客詳細表示画面を開きます。顧客モデル側でもサポート記録の一覧が表示されるようになります。

図4 顧客の詳細表示画面

このように、外部キー関係にあるモデルは、画面上でも双方向のリンク関係をもちます。これによって「どの顧客についてのサポート記録だったか」を確認できるようになります。

ワンポイント

外部キー関係では、顧客のデータが削除されたタイミングで、それに関連するサポートのデータも全て削除されます。(この動作を変更し、サポートのデータを同時に削除しない設定とすることもできます。)

定義方法

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

図5 サポートモデルの定義

定義のポイントは「顧客ID」が外部キーであることを指定する部分です。(図6)
「外部キー>モデル名」に、親モデルを指定します。

図6 外部キーの定義

重要

参照先項目名は、主キーとなっている必要があります。上の例では(参照先モデルである)"顧客" の "顧客ID" は主キーとなっています。

子モデル作成時の親の主キーの扱い

子モデルの詳細画面に用意された「登録画面へ」ボタンを押下して新規登録画面を開くと、親の主キーは転記された状態になります。つまり子は共通の親を持つことが前提となります。

図8 子モデルの詳細画面に用意された「登録画面へ」ボタンを押下する
図9 親の主キーが転記されている

一方、子モデルの検索・一覧表示画面に用意された「登録画面へ」ボタンを押下して新規登録画面を開くと、親の主キーは空白です。これは特定の子を起点にしていないためです。

図10 子モデルの検索・一覧表示画面に用意された「登録画面へ」ボタンを押下する
図11 親の主キーは空白である

親モデルの詳細画面に用意された子モデルの新規登録を押下すると、親の主キーは転記されます。

図12 親モデルの詳細画面に用意された子モデルの新規登録ボタン
図13 親の主キーが転記されている

グリッド表示

外部キーモデルの一覧表示形式がグリッドのとき、子モデル表示もグリッドになります。

図14 子モデルのグリッド表示

定義方法

子モデルが「グリッド表示」の場合、子の外部キーは検索条件を有効にしてください。

図15 外部キーは検索条件を有効にする

外部キーアイコン

外部キー指定された項目は、モデル項目一覧で鎖のアイコンが表示されます。

図16 鎖アイコンが表示される

子モデルの表示順序を制御する

親モデルの詳細表示画面の下部に用意される子モデル一覧データの並びは、子モデル主キーの昇順となっています。 これを変更することができます。

例えば親p1に紐づく子データc1,c2,c3を作成したとき、標準では、子モデル一覧の表示順は c1,c2,c3 です。 ここで子モデル「主キー」項目のソート順に"-1"を指定するとc3,c2,c1になります。

詳細は"モデル > ソート"をお読みください。

注意

ソートの設定は、親子モデル画面の子モデル表示だけでなく、子モデルの一覧表示画面にも同時に反映されます。(両者は区別されません)

繰り返しコンテナと外部キーの違い

「繰り返しコンテナ」と「外部キー」のいずれも、親モデルと子モデルの間で 1:N の関係を構築できます。両者の違いは次のとおりです。

  • 繰り返しコンテナは、親モデル内の "明細" という意味になります。親と強い従属性をもち、親が削除されると自動的に削除されます。
  • 外部キーは、親と子に何らかの関連があることを意味します。繰り返しコンテナほど強い従属性をもたず、子モデル側に対する独自の検索処理などを行うこともできます。

参照連動との組み合わせ

外部キーの値を使った参照連動を指定することもできます。ここでは「氏名」項目を表示するようにします。

図17 外部キーを連動元とした参照連動の実現

定義方法

ここでは「顧客名」項目を用意してみます。

図18 顧客名項目を追加する

この顧客名項目は参照連動とします。連動する項目は外部キーである "顧客ID" です。

図19 参照連動の設定

参照先モデルが複合キーの場合

参照先モデル(上の例では "顧客" モデル)の主キーが複合キーの場合、外部キー項目(上の例では "顧客ID" 項目)の物理カラム名にコンマ区切りで(参照先モデルの)主キー項目を列挙してください。

図20 物理カラム名を指定する(参照先モデルの主キーがcustomeridとcustomernameだった場合)

行クリック遷移8.5.4

次の条件に合致しているとき、子モデル一覧表示の行をクリックすると、対象モデルの詳細表示画面へ遷移させることができます。

  1. 遷移先モデルの詳細画面が作成されている。
  2. "外部キー連携 > 親モデルの詳細表示画面に表示するデータ一覧 > 詳細ボタン > 表示する" が有効である。
  3. "外部キー連携 > 親モデルの詳細表示画面に表示するデータ一覧 > 詳細ボタン > 表示する > 表示条件" が未設定である。
  4. "一覧表示の行クリックで詳細表示画面に遷移する" が有効である。
この条件を応用することができます。(1)(2)(4)を満たしつつ、(3) で表示条件をtrueと記述することで、当該モデルの一覧表示画面では行クリック遷移を有効にしつつ、子モデル一覧表示では(詳細ボタンは表示されるが)行クリック遷移を無効にすることができます。

トラブルシューティング

子モデル一覧が表示されない

子モデル一覧が表示されない(グリッド表示)

子モデルが「グリッド表示」の場合、子の外部キーは検索条件を有効にする必要があります。

親モデルの主キーが複合キーの場合

外部キーを用意する子モデルでは、親モデルの複合キーをすべて含める必要があります。

例えば親モデルの主キーが pkey1, pkey2 のとき、子モデルは pkey1 と pkey2 を外部キーとする項目を保持しなければなりません。どちらか片方のみを保持した子モデルを定義することはできません。