モデル駆動型アプリでリレーションシップを使いこなす


モデル駆動型アプリはデータ管理が得意なアプリで、本格的なテーブル設計を生かしたアプリを作ることができます。リレーションを活用する方法が様々ありますので、ご紹介したいと思います。

# ビューでの使い方
## 関連テーブルの列をビューへ表示させる
ビューの編集画面のテーブル列にはそのテーブルの列が表示されますが、「関連」タブをクリックすると、関連テーブルの一覧が表示されます。ここで、ワンクリックで関連テーブルの列を表示させることができます。
- ビューの編集画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/a5d7d6e5-5c60-806b-92b4-9405ab583fb8.png)<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/67b63264-bf21-0bda-514c-1fea93f5f92d.png" width=70%>

- 実際の画面![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/b4e2cfa6-c8a3-f9e2-81dd-92c2eec21af8.png)

## フィルタリング機能
アプリでのビューの操作にも便利な機能があります。
[Edit Filter]（フィルターを編集する）をクリックすると、フィルターの編集画面がでてきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/e57d0577-4bc4-1e95-3515-5811ffe7bf1d.png)
ここで「+ Add」（追加）ボタンを押すと「Add related entity」（関連エンティティの追加）というメニューが出てきます。これが関連テーブルのデータを使ってフィルタリングをかけることができる機能です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/fe7173a9-629d-e037-4a50-da709b00ac7a.png" width=60%>

「Choose a related entity」（関連エンティティを選択）をクリックするとこのビューに表示されるテーブルとリレーションを持つテーブルが表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/7753b73a-b93c-9520-5ffb-df800e0affaa.png" width=60%>
今回は「製品情報」列と連携されてる「製品」テーブルを使ってフィルタリングします。
次にこの列に値が入っているかどうかでフィルタリングすることができます。
「Contains data」(値が設定済み)か「Does not contain data」(値が未設定)を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/a6f204f4-877c-6826-6767-edef87b4068a.png)
「Does not contain data」(値が未設定)を選択すると、検索列で値が設定されてないレコードが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/579db17d-06c3-1dd7-a36a-a7f126e3070a.png)

「Contains data」(値が設定済み)を選ぶと、親テーブルの列を選択することができるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/a17800a6-09ef-63fd-5864-bf2c337fced3.png)
ここで例えば、製品テーブルの「原価」列が「10000」「より大きい」というフィルタリングをかけるかけることができます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/1b503ede-01ad-8e37-4047-19543586b705.png" width=70%>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/1487441d-2476-da16-5aad-7a2de2d8f3a4.png)




# フォームでの使い方
## 親レコード詳細画面への遷移
実は多対一リレーションがある列のデータは、フォーム上でワンクリックでそのデータを見に行くことができます。
例えば、販売注文テーブル（子テーブル）のフォームにおいて、製品情報列が製品テーブル（親テーブル）とリレーションを持っていたらここのデータがタグのようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/62b467ba-e237-ebc8-3a4a-0b60d00d3504.png)

クリックすると、製品テーブルのキーが「AT03」のレコード詳細画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/ac03c53d-6ad0-ebbe-d48f-3c559467e2b4.png)

## 関連タブ
関連テーブルのビューが、フォームの関連タブにデフォルトで入っています。
対象のテーブル項目をクリックすると、関連テーブルのAssosiated View（関連ビュー）が表示されます。その為、モデル駆動型アプリに関連テーブルのビューを追加して、必要に応じてカスタマイズするだけでデータの確認が簡単にできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/608eb799-ac04-bcfa-1345-6cb86d9d6249.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/0493f248-41bb-ee75-fec2-ea7170a4daf5.png)


## サブグリッド
１対多（１：Ｎ）のリレーションのテーブルをフォームに表示することができます。つまり親テーブルのフォームで子テーブルのビューを表示させることができます。
これが見れることで、このテーブルが呼び出された先を確認することができます。

例）製品テーブルのタブレットが販売注文テーブルにて、２回注文IDがSO-1000、SO-1002のレコードで呼び出されていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/00b5d78a-6e44-d7c6-7500-4ca63c0a4a43.png)

## 簡易表示フォーム(Quick View Form)
関連テーブル（親テーブル）のフォームを、データを関連付けながらフォーム内に表示することができます。
親テーブル側のフォームは簡易表示フォームと呼ばれるものです。これが子テーブルのフォームで見れることによって、どんなデータと関連付けたのかすぐに確認することができ、非常に便利です。

例）注文販売テーブルの「製品」列に関連づく製品テーブルの１行分が表示されます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/03f2d29c-e83d-14b6-9a6d-5e7e35259e5f.png)


[メインフォームに簡易表示フォームを追加する方法](https://qiita.com/skuramoto/items/64ea6e1a1a27be020f50)

## 簡易表示フォーム（編集版）
関連テーブル（親テーブル）のフォームを、データを関連付けながらフォーム内に表示するだけでなく、その場で親レコードを編集することができます。つまり、**簡易表示フォームの編集ができるバージョン**です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/99eeb75b-11eb-fac8-e287-44bccc73f710.png)

[親レコードの編集可能フォームをメインフォームに追加する方法](https://qiita.com/skuramoto/items/e2661d6ea0618e788ca4)

# まとめ
モデル駆動型アプリでのリレーションシップの使い方についてまとめました。
半自動的にリレーションに対応したアプリを作ることができるので、使い方を知っておくだけで非常に便利です。
リッチな設計のテーブルの活用が、モデル駆動型ならではの良さです！ぜひいろいろ試してみてください。