Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Czym różni się morftomany od MorphedByMany pod względem struktury bazy danych


Czym różni się morftomany od MorphedByMany pod względem struktury bazy danych


Różnica między „morphtomany” i „morphedByMany” w polimorficznych relacjach z wieloma do wielu jest przede wszystkim ich role w relacji i tym, jak wspiera ich struktura bazy danych.

Struktura bazy danych w polimorficznych wielu do wielu

Polimorficzne relacje z wieloma do wielu obejmują trzy główne tabele:

- Dwie tabele modelowe (np. „Posty” i „Tags`)
- Jedna pośrednia tabela obrotu (np. „Taggables`)

Tabela obrotu zawiera co najmniej trzy kolumny:

- `tag_id` (identyfikator powiązanego modelu, tag)
- `taggable_id` (identyfikator modelu związany z tagiem, np. Post lub wideo)
- `TagGable_Type` (nazwa klasy lub typ powiązanego modelu, np.` App \ Models \ post` lub `App \ Models \ Video`)

Ta struktura pozwala pojedynczej tabeli obrotowej powiązać wiele różnych modeli z wspólnym modelem (znaczniki w tym przypadku) bez konieczności oddzielnych tabel obrotowych dla każdej kombinacji modelu [5] [9].

Rola „morphtomany”

- Używany w modelu, który „jest właścicielem” lub „ma„ związek polimorficzny.
- Określa związek z perspektywy modelu związanego z wieloma innymi modelami.
- Na przykład w modelu „post” metoda `tags ()` używa `morphtomany`, aby uzyskać wszystkie tagi powiązane z tym postem.
- Ta metoda określa powiązany model i „nazwa morfowania” (np. „„ Taggable ”), który odpowiada kolumnom tabeli obrotowej (` taggable_id` i `taggable_type`).
- Zapyta filtrowanie tabeli obrotowej według identyfikatora i typu obecnego modelu, aby znaleźć powiązane modele [5] [9].

Rola „MorphedByMany”

- Używany w modelu, który jest celem relacji polimorficznej.
-Definiuje odwrotną stronę polimorficznej relacji wiele do wielu.
- Na przykład w modelu „tag” metody takie jak `posts ()` lub `videos ()` Użyj `MorphedByMany`, aby uzyskać wszystkie posty lub filmy powiązane z tym tagiem.
- Określa powiązaną klasę modelu i tę samą nazwę Morpha, którą używa w „morptomania”.
- Ta metoda pyta filtrowanie tabeli Pivot według typu powiązanego modelu i identyfikator, aby znaleźć wszystkie modele tego typu powiązane z bieżącym modelem (TAG) [5] [9].

Podsumowanie różnic w warunkach bazy danych

- `Morphtomany 'jest wywoływany w modelu związanym z wieloma innymi, i używa kolumn Table Pivot„ TagGable_id` i „taggable_type” do filtrowania rekordów, w których „tagGable_Type” odpowiada klasie bieżącego modelu.
- „MorphedByMany” jest wywoływany w modelu związanym z (odwrotnym) i wykorzystuje tabelę obrotu, aby znaleźć wszystkie modele określonego typu, które powracają do obecnego modelu.

Obie metody wykorzystują tę samą tabelę obrotową, ale różnią się w kierunku reprezentowanej przez nich związku. Tabela obrotu pozostaje taka sama, z kolumnami dla identyfikatora i typu modelu powiązanego, umożliwiając polimorficzne łączenie wielu typów modeli za pomocą pojedynczej tabeli.

Zasadniczo „morphtomany” określa związek od strony modelu „rodzica” lub „posiadania”, podczas gdy „MorphedByMany” określa odwrotną relację od „powiązanej” strony modelu, oba polegające na tej samej strukturze tabeli polimorficznej [5] [9] [1].

Cytaty:
[1] https://laracasts.com/discuss/channels/laravel/difference-between-standard-polymorphic-many-to-many-polymorphic
[2] https://www.sitepoint.com/eloquents-polymorphic-relationships-explained/
[3] https://Laraveldaily.com/post/Laravel-Polymorphic-Many-to-many-get-all-Relate-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/simplifying-many-to-many-relationships-with-laravel-polymorphic-relacje
[8] https://stackoverflow.com/questions/68073778/Laravel-polymorphic-many-to-many-relationship-table-with-relationship-to-a
[9] https://blog.logreocke.com/polymorphic-relationships laravel/