親子関係を定義する

最終更新日: 2022年5月18日
R8 | R9

「顧客(customer)」と「サポート(support)」という2つのモデルを例に説明します。

  1. 顧客のデータを新規に登録します。
    顧客の詳細表示画面に「サポート新規作成」ボタンが用意されています。 外部キーの関係にあるサポートモデルの新規登録は、対象データ(ここでは顧客データ)の詳細表示画面から行います。
    顧客詳細表示画面
  2. 「サポート新規作成」ボタンをクリックすると、サポート新規登録画面を開きます。顧客ID(紐づく親モデルのID)は自動設定されています。
    サポート新規登録画面
  3. 各項目を入力して登録を行います。サポート詳細表示画面から顧客モデルへ戻るための「顧客 一覧表示」「顧客 詳細表示」ボタンが用意されています。
    サポート詳細表示画面
  4. 「顧客 詳細表示」ボタンをクリックして顧客詳細表示画面を開きます。顧客モデル側でもサポート記録の一覧が表示されるようになります。

    顧客の詳細表示画面

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

    ワンポイント

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

定義方法

  1. 「顧客」「サポート」モデルを用意します。
    顧客モデルとサポートモデル
  2. サポートモデルを次の通り定義します。
    「顧客ID」を外部キー項目としています。
    外部キー項目の型は、参照先(親)の項目の型と同じ型(今回は数値型)とします。
    サポートモデル
  3. 外部キーの指定方法です。「顧客ID」項目の詳細定義を開きます。
    「詳細 > 外部キー」でモデル名と項目を指定します。
    外部キーの定義

    重要

    参照先項目は、主キーでなければいけません。上の例では(参照先モデルである)「顧客」の「ID」は主キーとなっています。

外部キーアイコン

外部キー項目は、右端に鎖のアイコンが表示されます。

鎖アイコンが表示される

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

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

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

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

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

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

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

グリッド表示

外部キーモデル(ここではサポートモデル)の一覧表示形式が「グリッド形式」のとき、親モデル詳細画面の子モデルもグリッド形式で表示されます。

子モデルのグリッド表示

定義方法

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

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

重要

検索条件を有効にしない場合、親モデルのキーによる絞り込みが行われません。(そのため、子モデルがすべて表示されます。)

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

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

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

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

注意

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

繰り返しコンテナとの違い

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

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

参照連動との組み合わせ

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

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

ワンポイント

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

定義方法

  1. サポートモデルに「顧客名」項目を追加します。型は「他モデルの項目参照」を選択します。
    顧客名項目を追加する
  2. この顧客名項目は参照連動とします。連動する項目は外部キーである「顧客ID」です。
    参照連動の設定

複合キーとの組み合わせ

外部キー項目と複合キーの組み合わせについて、別ページでまとめています。

行クリック遷移

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

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

子モデルデータのページング表示9.1.0

親モデルの詳細表示画面の子モデル表示時、ページングを設定できます。 この設定を有効にすることで、子モデルのデータ量が多い時のパフォーマンス向上につながります。

親モデルの詳細表示画面

定義方法

  1. この設定を有効にするには、親モデルの表示設定が「CSSレイアウト (CSS layout)」である必要があります。
    親モデルの設定を確認してください。
    親モデルの設定を確認する
  2. 子モデルの「画面 > 検索・一覧表示 > 外部キー連携」より、「ページングを有効にする」にチェックを入れます。
    「最大表示数」では、1ページあたりに表示するデータの件数を指定します。ここでは3件としました。
    (最大表示数が未入力の場合、20件となります。)
    ページングと最大表示数を設定する

ワンポイント

ページングの設定は親モデルの一覧更新画面でも行えます。
詳しくは「子モデルの同時更新 > 子モデルデータのページング表示」をお読みください。

トラブルシューティング

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

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

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

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

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

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