Laravelの「形態腫」の関係は、多型モデルと多型モデルが多型の中間テーブルを介して単一のモデルタイプと関係を共有できる多対多形関係を定義するために使用されます。これにより、各モデルペアに個別のピボットテーブルを必要とせずに、多くの異なるモデルと共通のモデルと柔軟な関連性が可能になります。
Laravelの「Morphtomany」の一般的なユースケース
** 1。タグ付けシステム
最も一般的なユースケースの1つは、複数の異なるモデル(投稿、ビデオ、ページなど)が同じタグでタグ付けできるタグ付けシステムを実装することです。各モデルタグ関係に個別のピボットテーブルを持つ代わりに、「morphtomany」を使用すると、すべてのタグを単一の「タグ」テーブルに保存し、任意のモデルに関連付けます。
たとえば、「post」モデルと「ビデオ」モデルの両方に「morphtomany」を使用して「morphtomany」を使用して「tags()」の両方のモデルがあり、「tag」モデルは「morphedbymany」を使用してすべての投稿またはビデオを取得できます[1] [5] [9]。
** 2。さまざまなコンテンツタイプの分類
タグと同様に、カテゴリはさまざまなコンテンツタイプで共有できます。たとえば、記事と製品の両方を分類する必要がある場合があり、多型から多くの関係があるため、冗長なテーブルなしでカテゴリを共有できます。
** 3。ラベルまたは属性を複数のモデルに割り当てます
「Morphtomany」を使用して、さまざまなモデル(ユーザー、注文、製品など)に適用できるラベル、属性、または機能がある場合、これらのラベルを任意のモデルタイプに柔軟に関連付けることができます。
** 4。複数のユーザータイプにわたるユーザーロールまたはアクセス許可
複数のユーザータイプ(管理者、顧客、ベンダーなど)を備えたアプリケーションでは、「Morphtomany」を使用して役割または権限を多型に割り当てることができるため、ロールは単一のテーブルで管理されますが、異なるユーザーモデルに関連しています[1]。
** 5。コメントや添付ファイルを多目的に複数のモデルにリンクする
多くの場合、コメントは1対多くの多型ですが、複数のコメントや添付ファイルが多目的な方法で複数のモデルに関連するシナリオがある可能性があります。 「Morphtomany」は、そのような関係をモデル化するために使用できます。
##どのように「morphtomany」が機能するか
- 「taggables」、「tag_id」、 `taggable_id`、および` taggable_type`の列など、単一のピボットテーブルを使用します。
- `taggable_id`および` taggable_type`列により、Laravelはタグが関連付けられているモデルを決定できます。
- 関連モデル(例:「post」、 `video`)では、` $ this-> morphtomany(tag :: class、 'taggable') `を返すメソッドを定義します。
- 「タグ」モデルでは、「morphedbymany」を使用して逆関係を定義し、そのタグに関連付けられた特定のタイプのすべてのモデルを取得します[1] [5]。
## まとめ
「morphtomany」は、複数のモデルを多目的な多型の方法で共通のモデルに関連付ける場合に理想的です。システム、分類、複数のユーザータイプにわたるロール割り当て、および各ペアの個別のピボットテーブルを必要とせずに多くの異なるモデルが関連するモデルの共通セットを共有するシナリオに広く使用されています。
このアプローチは、多型と多くの関係を単一のエレガントな構造に集中させることにより、データベースの設計とコードメンテナンスを簡素化します。
引用:
[1] https://blog.logrocket.com/polymorphic-lesthips-laravel/
[2] https://laraveldaily.com/post/polymorphic-lelations-laravel-open-source-examples
[3] https://stackoverflow.com/questions/57522923/how-to-use-morphtomany
[4] https://stackoverflow.com/questions/43285779/laravel-polymorphic relations-has-many-through
[5] https://laravel.com/docs/11.x/eloquent-lestionships
[6] https://www.linkedin.com/pulse/complete-guide-polymorphic-relationships-morphs-sajith-madhubashana-rk1xc
[7] https://joedixon.co.uk/a-practical-use-case-for-laravels-polymorphic relationships
[8] https://stackoverflow.com/questions/58811999/what-are-the-of-morphs-column-type-in-laravel
[9] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all records