スポンサーリンク

【Exment】データ連動とリレーションと関連データ表示のメモ

入力されたIDから他のテーブルの名称を表示させたいというときのメモ。

データ連動設定で行う方法

例えば、「部署」テーブルと「ユーザー」テーブルにそれぞれ以下のカスタム列があった場合に、編集フォームで「部署ID」を選択したら「部署名」欄に部署の名称が表示される方法です。

  • 部署ID
  • 部署名

「ユーザー」テーブルの「部署ID」に入力された数字から「部署名」の欄に自動的に「部署名」が表示されるようにするようにします。ただし、リレーションでないので、「部署」テーブルを開いたときに該当するユーザーが表示されません。

「ユーザー」テーブルですること

カスタム列「部署ID」を作成

 選択肢 (他のテーブルの値一覧から選択)」で作成

フォームで「部署名」を変更

「部署名」のをクリックして「データ連動設定」の中になる以下の2項目を設定

  • 「列を選択」欄に「部署ID」を設定
  • 「リンク列を選択」欄に「部署名」を設定

マニュアル

これについては以下の公式マニュアルに具体的な方法が記載されいます。

Document
Exment Manual Page

リレーションで行う方法

「データ連動」と違い、リレーションを行うと「ユーザー」テーブル側と「部署」テーブル側から関連するデータに双方向でアクセスや表示ができるようになります。

部署テーブルですること

リレーションを作成

  • 親テーブル: 部署
  • 子テーブル: ユーザー
  • リーレーションの種類: 1対多 または 多対多
1対多と多対多の挙動の違い
1対多の挙動

1対多の場合、「ユーザー」テーブルで「部署ID」を必ず選択しなければなりません。また、一度保存すると「ユーザー」テーブル側で「部署ID」を変更することができず、レコードを再登録しないといけません。1部署を必ず選択しなければならないときに向いているかと思います。

多対多の挙動

多対多の場合、1対多と違い、選択を必須としません。また、複数選択が可能となります。逆に複数選択を止めることができず、一つだけの選択に制限することができませんが、自由度が高いのはこちらだと思います。

ただし、一覧表示でソートができません。ソートすると以下のエラーが出ます。

admin.error_exception - Many to many relation not support order by.

Many to many relation not support order by.
多対多の関係は order by をサポートしていません。

ユーザーテーブルですること

ビューに部署IDと部署名を追加

「ユーザー」テーブルの「全体のビュー」の「設定を開く」から「現在のビュー設定変更」を開きます。「表示列選択」の部分に以下の項目を追加します。

  • 部署:部署ID
  • 部署:部署名

マニュアル

リレーションについては以下の公式マニュアルがあります。

Document
Exment Manual Page
タイトルとURLをコピーしました