親子関係を設定する
最終更新日: 2022年8月31日
ここでは「顧客」と「サポート」という2つのモデルをとりあげてみます。
顧客のデータを新規に登録します。
「サポート新規作成」ボタンをクリックし、サポート新規登録画面を開いてみます。顧客ID(紐づく親モデルのID)は自動設定されています。
各項目を入力して登録を行います。サポート詳細表示画面から顧客モデルへ戻るための「顧客 一覧表示」「顧客 詳細表示」ボタンが用意されています。
「顧客 詳細表示」ボタンをクリックして顧客詳細表示画面を開きます。顧客モデル側でもサポート記録の一覧が表示されるようになります。
このように、外部キー関係にあるモデルは、画面上でも双方向のリンク関係をもちます。これによって「どの顧客についてのサポート記録だったか」を確認できるようになります。
外部キー関係では、親(顧客)のデータが削除されたタイミングで、それに関連する子(サポート)のデータも全て削除されます。
今回用意したサポートモデルの設定を説明します。
参照方法は「検索画面」とします。
参照先項目名は、主キーとなっている必要があります。上の例では(参照先モデルである)"顧客" の "顧客ID" は主キーとなっています。
設定のポイントは「顧客ID」が外部キーであることを指定する部分です。
外部キー指定された項目は、モデル項目一覧で鎖のアイコンが表示されます。
子モデルの詳細画面に用意された「登録画面へ」ボタンをクリックして新規登録画面を開くと、親の主キーは転記された状態になります。つまり子は共通の親を持つことが前提となります。
子モデルの検索・一覧表示画面に用意された「登録画面へ」ボタンをクリックして新規登録画面を開くと、親の主キーは空白です。これは特定の子を起点にしていないためです。
このタイミングで、親を検索して紐づけることができます。
親モデルの詳細画面に用意された子モデルの新規登録をクリックすると、親の主キーは転記されます。
上で説明した設計は、子モデルだけでユニークな主キー項目「ID」を用意しました。親モデルへの外部キーは、子モデルの主キーではありません。
この設計は、子モデルを独立して扱いやすい特徴があります。上の例ではサポートモデルとしての検索や一覧表示といった操作を行うことができ、また(このセクションで触れますが)親と紐づかない子モデルといったデータを許容します。
親モデルの主キーを、子モデル自身の主キーかつ外部キーとし、これに枝番を加えて複合主キーとする設計です。例えば親モデルの主キー値 "1000" に対して、子モデル "1000-1", "1000-2",... が存在するようになります。
この設計は、子モデルを親モデルの一部とみなします。子モデル単体としての操作は行わず、親モデルの操作を主体とする場合に有効です。
この設計では、枝番の割り当てはスクリプトを使います。詳細は「Wagby Developer Network > 設計パターン > コードの設計 > 親子モデル関係で、子モデルの主キーを親モデルの主キー + 枝番とする」をお読みください。
親モデルの詳細表示画面の下部に用意される子モデル一覧データの並びは、子モデル主キーの昇順となっています。
外部キーの値を使ったルックアップを指定することもできます。ここでは「氏名」項目を表示するようにします。
親モデルの詳細画面から子モデルの登録画面に遷移した場合のみ、この機能が適用されます。
ここでは「顧客名」項目を用意してみます。
この顧客名項目はルックアップとします。連動する項目は外部キーである "顧客ID" です。
次の条件に合致しているとき、子モデル一覧表示の行をクリックすると、対象モデルの詳細表示画面へ遷移させることができます。
例
顧客の詳細表示画面に「サポート新規作成」ボタンが用意されています。
外部キーの関係にあるサポートモデルの新規登録は、対象データ(ここでは顧客データ)の詳細表示画面から行います。
ワンポイント
設定方法
外部キーに指定した項目の型は、参照先(親)の主キーを参照するとします。
重要
「外部キー>モデル名」に、親モデルを指定します。
「外部キー>参照先項目名」に、親モデルの主キーを指定します。親モデルが複合主キーの場合、どの項目に対応するか、を設定してください。
外部キーアイコン
子モデル作成時の親の主キーの扱い
子モデルの詳細画面に用意された「登録画面へ」ボタンを利用する
子モデルの検索・一覧表示画面に用意された「登録画面へ」ボタンを利用する
親モデルの詳細表示画面に用意された「新規作成」ボタンを利用する
子モデルの主キー設計
子モデルだけでユニークな主キーを使う
親モデルと密に結合する
子モデルの表示順序
ルックアップとの組み合わせ
ワンポイント
親モデルを経由せずに子モデルの登録画面にアクセスし、主キーを入力してもルックアップは行われません。
設定方法
行クリック遷移
トラブルシューティング
子モデル一覧が表示されない