【Elixir】Ecto で色々な関係の設定
Elixir の Ecto で色々な関連設定について詳しく解説します。has_one, has_many, belongs_to, throughオプションに焦点を当てます。
その他のオプションについても以下のページで確認できますのでご参考にどうぞ
Ecto.Schema
基本的な has_oneの使い方
| |
カラム名
- 外部キーは
Permalinkテーブルに作成されます。 - カラム名は
post_idとなります。
カラム名のカスタマイズ
foreign_key を指定することで自分のテーブルのカラム名を指定できます。
| |
相手先のIDの指定
references を指定することで自分のテーブルのカラム名を指定できます。
| |
where オプションの使用
where を has_one する際に条件が付与されます。
| |
where は他の関連でも使用可能
このwhereオプションはhas_oneだけでなく、has_manyやbelongs_toなど、他の関連でも使用できます。
through オプションの使用
| |
この設定では、PostがCommentを経由してAuthorに関連していると定義されます。
has_many と belongs_to の違い
has_many
- 一対多(One-to-Many)の関連を表現。
- 親テーブルが子テーブルに対して複数のレコードを持つ。
- 親テーブル側で定義。
| |
belongs_to
- 多対一(Many-to-One)の関連を表現。
- 子テーブルが親テーブルに対して1つのレコードを持つ。
- 子テーブル側で定義。
| |
共通点と相違点
- 共通点: 両者は一対多の関連を形成するため、一緒に使われる。
- 相違点:
has_manyは"一対多"の"一"側で使われ、belongs_toは"多"側で使われる。
まとめ
has_oneで基本的な一対一の関連を設定。foreign_key:で外部キーのカラム名をカスタマイズ。references:で相手先の特定のIDカラムを参照。whereオプションで関連を条件付きで制御。throughオプションで中間テーブルを経由した関連を設定。has_manyとbelongs_toの違いと使い方。
Ectoは非常に柔軟な設定が可能で、これらのオプションを駆使することで、さまざまな要件に対応できます。