親子関係を設定する

最終更新日: 2022年8月31日

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

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

顧客詳細表示画面

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

サポート新規登録画面

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

サポート詳細表示画面

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

顧客の詳細表示画面

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

ワンポイント

外部キー関係では、親(顧客)のデータが削除されたタイミングで、それに関連する子(サポート)のデータも全て削除されます。

設定方法

今回用意したサポートモデルの設定を説明します。
外部キーに指定した項目の型は、参照先(親)の主キーを参照するとします。

サポートモデルの設定

参照方法は「検索画面」とします。

外部キーの設定

重要

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

※ 参照方法は必ずしも「検索画面」だけでなく、リストボックスなども利用できます。しかし一般的に、外部キー参照関係では多くのデータが対象となるため、リストボックスなどでは候補が大量に表示されると使い勝手がよくありません。そのため「検索画面」の利用が妥当です。

設定のポイントは「顧客ID」が外部キーであることを指定する部分です。
「外部キー>モデル名」に、親モデルを指定します。
「外部キー>参照先項目名」に、親モデルの主キーを指定します。親モデルが複合主キーの場合、どの項目に対応するか、を設定してください。

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

外部キーアイコン

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

外部キーアイコン

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

子モデルの詳細画面に用意された「登録画面へ」ボタンを利用する

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

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

子モデルの検索・一覧表示画面に用意された「登録画面へ」ボタンを利用する

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

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

このタイミングで、親を検索して紐づけることができます。

親を検索して紐づける

親モデルの詳細表示画面に用意された「新規作成」ボタンを利用する

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

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

子モデルの主キー設計

子モデルだけでユニークな主キーを使う

上で説明した設計は、子モデルだけでユニークな主キー項目「ID」を用意しました。親モデルへの外部キーは、子モデルの主キーではありません。

この設計は、子モデルを独立して扱いやすい特徴があります。上の例ではサポートモデルとしての検索や一覧表示といった操作を行うことができ、また(このセクションで触れますが)親と紐づかない子モデルといったデータを許容します。

親モデルと密に結合する

親モデルの主キーを、子モデル自身の主キーかつ外部キーとし、これに枝番を加えて複合主キーとする設計です。例えば親モデルの主キー値 "1000" に対して、子モデル "1000-1", "1000-2",... が存在するようになります。

この設計は、子モデルを親モデルの一部とみなします。子モデル単体としての操作は行わず、親モデルの操作を主体とする場合に有効です。

この設計では、枝番の割り当てはスクリプトを使います。詳細は「Wagby Developer Network > 設計パターン > コードの設計 > 親子モデル関係で、子モデルの主キーを親モデルの主キー + 枝番とする」をお読みください。

子モデルの表示順序

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

ルックアップとの組み合わせ

外部キーの値を使ったルックアップを指定することもできます。ここでは「氏名」項目を表示するようにします。

外部キーを連動元としたルックアップの実現

ワンポイント

親モデルの詳細画面から子モデルの登録画面に遷移した場合のみ、この機能が適用されます。
親モデルを経由せずに子モデルの登録画面にアクセスし、主キーを入力してもルックアップは行われません。

設定方法

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

顧客名項目を追加する

この顧客名項目はルックアップとします。連動する項目は外部キーである "顧客ID" です。

ルックアップの設定

行クリック遷移

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

  1. 遷移先モデルの詳細画面が作成されている。
  2. "外部キー連携 > 親モデルの詳細表示画面に表示するデータ一覧 > 詳細ボタン > 表示する" が有効である。

トラブルシューティング

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