Rozdíl mezi „morphtomany“ a „morphedbymany“ v Laravel polymorfních vztazích mnoho na mnoho spočívá především v jejich rolích ve vztahu a tím, jak je databázová struktura podporuje.
Struktura databáze v polymorfních mnoha
Polymorfní vztahy s mnoha a many zahrnují tři hlavní tabulky:
- Dvě tabulky modelu (např. `Příspěvky a„ tagy “)
- Jedna meziprodukční otočná tabulka (např. `Taggables`)
Tabulka otočení obsahuje nejméně tři sloupce:
- `tag_id` (ID souvisejícího modelu, např. Tag)
- `taggable_id` (ID modelu, který souvisí se značkou, např. Post nebo video)
- `taggable_type` (název třídy nebo typ souvisejícího modelu, např.` app \ models \ post` nebo `app \ models \ video`)
Tato struktura umožňuje jediné otočné tabulce spojit více různých modelů s běžným modelem (v tomto případě značky), aniž by pro každou kombinaci modelu bylo nutné samostatné tabulky Pivot [5] [9].
Role `morphtomany`
- Používá se na modelu, který „vlastní“ nebo „má“ polymorfní vztah.
- Definuje vztah z pohledu modelu, který souvisí s mnoha dalšími modely.
- Například v modelu `post` metoda` tags () `používá` morphToMany`, aby všechny značky spojené s tímto příspěvkem byly spojeny.
- Tato metoda určuje související model a „název morfy“ (např. `'Taggable'`), který odpovídá sloupcům tabulky otočení (` taggable_id` a `taggable_type`).
- Dotazuje se filtrování tabulky otočné tabulky podle ID a typu aktuálního modelu a naleznete související modely [5] [9].
Role `morphedbymany`
- Používá se na modelu, který je cílem polymorfního vztahu.
-Definuje inverzní stránku polymorfního vztahu mnoho na mnoho.
- Například v modelu `tag`, metody jako` příspěvky () `nebo` videa () `použijte` morphedBymany`, aby všechny příspěvky nebo videa spojené s touto značkou byly spojeny.
- Specifikuje třídu souvisejících modelů a stejný název morfy použitého v `morphTomany`.
- Tato metoda se dotazuje na filtrování tabulky otočení podle typu souvisejícího modelu a ID k nalezení všech modelů tohoto typu spojeného s aktuálním modelem (TAG) [5] [9].
Shrnutí rozdílů v databázových podmínkách
- `MorphTomany` je volána na model, který souvisí s mnoha dalšími, a používá sloupce tabulky Pivot` taggable_id` a `taggable_type` k filtrování záznamů, kde` taggable_type` odpovídá třídě současného modelu.
- „MorphedBymany“ je vyzván k modelu, který souvisí s (inverzní), a používá kontingenční tabulku k nalezení všech modelů konkrétního typu, který se vztahuje zpět k aktuálnímu modelu.
Obě metody používají stejnou tabulku otočení, ale liší se ve směru vztahu, který představují. Tabulka Pivot zůstává stejná, se sloupci pro ID a typ souvisejícího modelu, což umožňuje polymorfním propojení více typů modelu prostřednictvím jedné tabulky.
V podstatě „morphtomany“ definuje vztah z modelové strany „rodičů“ nebo „vlastnění“, zatímco „Morphedbymany“ definuje inverzní vztah z „související“ modelové strany, oba se spoléhají na stejnou polymorfní strukturu otočné tabulky [5] [9] [1].
Citace:
[1] https://laracasts.com/discuss/channels/laravel/difference-between-standard-polymorfní-ny- to-many-polymorfní
[2] https://www.sitepoint.com/eloquents-polymorphic-relationships-explaided/
[3] https://laraveldaily.com/post/laravel-polymorfic-many-to-many-get-all-records
[4] https://laracasts.com/discuss/channels/eloquent/polymorphic-many-to-many-relation-to-multiple-models
[5] https://laravel.com/docs/11.x/eloquent-relationships
[6] https://docs.octobercms.com/3.x/extend/database/relations.html
[7] https://simple-code.agency/blog/development/simplifikační
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic-many-to--relationship-pivot-with-relationship-to-
[9] https://blog.logrocket.com/polymorphic-relationships-laravel/