Laravel Polymorphicの多くの関係における「Morphtomany」と「Morphedbymany」の違いは、主に関係における役割とデータベース構造がそれらをどのようにサポートするかにあります。
###多型から多数の多型のデータベース構造
多型の多くの関係と多くの関係には、3つの主要なテーブルが含まれます。
-2つのモデルテーブル(「投稿」と「タグ」など)
- 1つの中間ピボットテーブル(例えば、「Taggables」)
ピボットテーブルには、少なくとも3つの列が含まれています。
- `tag_id`(関連モデルのID、例えばタグ)
- `taggable_id`(タグに関連するモデルのID、例えば、投稿やビデオ)
- `taggable_type`(関連モデルのクラス名またはタイプ、例えば` app \ models \ post`または `app \ models \ video`)
この構造により、単一のピボットテーブルは、各モデルの組み合わせに個別のピボットテーブルを必要とせずに、複数の異なるモデル(この場合はタグ)に関連付けることができます[5] [9]。
###「Morphtomany」の役割
- 「所有」または「「所有」を持っているモデルで使用されています。
- 他の多くのモデルに関連するモデルの観点から関係を定義します。
- たとえば、「post」モデルでは、「tags()」メソッドは「morphtomany」を使用して、その投稿に関連付けられたすべてのタグを取得します。
-このメソッドは、関連するモデルと「モーフ名」(例えば、 `'Taggable」)を指定します。これは、ピボットテーブル列(` taggable_id`および `taggable_type`)に対応します。
- 現在のモデルのIDとタイプでピボットテーブルフィルタリングをクエリして、関連するモデルを見つけます[5] [9]。
###「morphedbymany」の役割
- 多型関係のターゲットであるモデルで使用されます。
- 多型と多くの関係の逆側を定義します。
- たとえば、 `Tag`モデルでは、` post() `または` videos() `のようなメソッドを使用して、そのタグに関連付けられたすべての投稿またはビデオを取得します。
- 関連するモデルクラスと「morphtomany」で使用されている同じモーフ名を指定します。
-このメソッドは、関連モデルのタイプとIDでピボットテーブルフィルタリングをクエリして、現在のモデル(タグ)に関連付けられたそのタイプのすべてのモデルを見つけます[5] [9]。
###データベース用語の違いの概要
- 「Morphtomany」は他の多くに関連するモデルで呼び出され、ピボットテーブル列「Taggable_id」と `taggable_type`を使用して、「taggable_type」が現在のモデルのクラスと一致するレコードをフィルタリングします。
- 「morphedbymany」は(逆)に関連しているモデルで呼び出され、ピボットテーブルを使用して、現在のモデルに関連する特定のタイプのすべてのモデルを見つけます。
どちらの方法も同じピボットテーブルを使用しますが、それらが表す関係の方向が異なります。ピボットテーブルは同じままで、関連するモデルのIDとタイプの列があり、複数のモデルタイプを単一のテーブルから多型にリンクすることができます。
本質的に、「morphtomany」は「親」または「所有」モデル側からの関係を定義し、「Morphedbymany」は「関連」モデル側から逆の関係を定義し、どちらも同じ多型ピボットテーブル構造[5] [9] [1]に依存しています。
引用:
[1] https://laracasts.com/discuss/channels/laravel/difference-between-standard-polymorphic-to-many-polymorphic
[2] https://www.sitepoint.com/eloquents-polymorphic-lestionships-explained/
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all records
[4] https://laracasts.com/discuss/channels/eloquent/polymorphic-many-to-many-to-multiple-models
[5] https://laravel.com/docs/11.x/eloquent-lestionships
[6] https://docs.octobercms.com/3.x/extend/database/relations.html
[7] https://simple-code.agency/blog/development/simplifinity-many-to-many-lelationships-with-laravel-polymorphic relations
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic-many-to-many-relationship-table-with relationship-to-a
[9] https://blog.logrocket.com/polymorphic-lestionships-laravel/