Die "Morphtomanie" -Beziehung in Laravel wird verwendet, um viele polymorphe Beziehungen viele zu viele zu viele Modelle zu definieren, in denen mehrere Modelle eine Beziehung mit einem einzelnen Modelltyp durch eine polymorphe Zwischentabelle teilen können. Dies ermöglicht eine flexible Assoziation vieler verschiedener Modelle zu einem gemeinsamen Modell, ohne separate Pivot -Tabellen für jedes Modellpaar zu benötigen.
Häufige Anwendungsfälle für "Morphtomanie" in Laravel
** 1. Tagging -Systeme
Einer der häufigsten Anwendungsfälle ist die Implementierung eines Tagging -Systems, bei dem mehrere verschiedene Modelle (z. B. Beiträge, Videos, Seiten) mit denselben Tags markiert werden können. Anstatt separate Pivot-Tabellen für jede Modell-Tag-Beziehung zu haben, ermöglicht "Morphtomany", dass alle Tags in einer einzelnen "Tags" -Tabelle gespeichert und polymorph mit jedem Modell zugeordnet werden.
Beispielsweise können sowohl "Post" als auch "Video" -Modelle eine "Tags ()" "Methode mit" Morphtomany "zum Abrufen von Tags haben, und das" Tag "-Modell kann" MorphedByMany "verwenden, um alle Beiträge oder Videos mit dem Tag zu erhalten [1] [5] [9].
** 2. Kategorisierung verschiedener Inhaltstypen
Ähnlich wie bei Tags können Kategorien über verschiedene Inhaltstypen geteilt werden. Zum Beispiel müssen sowohl Artikel als auch Produkte möglicherweise kategorisiert werden, und eine polymorphe Viele-zu-Viele-Beziehung ermöglicht es ihnen, Kategorien ohne redundante Tabellen zu teilen.
** 3. Zuweisen von Beschriftungen oder Attributen an mehrere Modelle
Wenn Sie Etiketten, Attribute oder Funktionen haben, die für verschiedene Modelle (z. B. Benutzer, Bestellungen, Produkte) gelten können, ermöglicht es Ihnen, diese Beschriftungen flexibel mit jedem Modelltyp zu verbinden.
** 4. Benutzerrollen oder Berechtigungen über mehrere Benutzertypen hinweg
In Anwendungen mit mehreren Benutzertypen (z. B. Administrator, Kunden, Lieferanten) können Rollen oder Berechtigungen polymorph unter Verwendung von "Morphtomany" zugewiesen werden, damit die Rollen in einer einzigen Tabelle verwaltet werden, jedoch mit verschiedenen Benutzermodellen bezogen werden [1].
** 5. Verknüpfung von Kommentaren oder Anhängen mit mehreren Modellen in viel zu vielen Weise
Während Kommentare häufig ein eins zu viele polymorph sind, kann es Szenarien geben, in denen mehrere Kommentare oder Anhänge auf viele-zu-Viele-Weise auf mehrere Modelle zusammenhängen. "Morphtomany" kann verwendet werden, um solche Beziehungen zu modellieren.
Wie `Morphtomany` funktioniert
- Es wird eine einzelne Pivot -Tabelle verwendet, z. B. `Taggables`, mit Spalten für` Tag_id`, `taggable_id` und` taggable_type`.
- Die Spalten `Taggable_id` und` Taggable_type` erlauben Laravel, zu bestimmen, welches Modell das Tag zugeordnet ist.
- In den zugehörigen Modellen (z. B. "post", "Video") definieren Sie eine Methode, die "$ this-> Morphtomanie (Tag :: class," Taggable ") zurückgibt.
- Auf dem "Tag" -Modell definieren Sie inverse Beziehungen unter Verwendung von "MorphedByMany", um alle Modelle eines bestimmten Typs, das diesem Tag zugeordnet ist [1] [5], alle Modelle abzurufen.
Zusammenfassung
"Morphtomany" ist ideal, wenn Sie mehrere Modelle mit einem gemeinsamen Modell in einer viel zu viele polymorphen Weise in Verbindung bringen möchten. Es wird häufig für Tagging -Systeme, Kategorisierung, Rollenzuweisung über mehrere Benutzertypen hinweg und in jedem Szenario verwendet, in dem viele verschiedene Modelle einen gemeinsamen Satz verwandter Modelle teilen, ohne separate Pivot -Tabellen für jedes Paar zu benötigen.
Dieser Ansatz vereinfacht das Datenbankdesign und die Wartung von Code, indem polymorphe viel-zu-viele-Beziehungen zu einer einzigen eleganten Struktur zentralisiert werden.
Zitate:
[1] https://blog.logrocket.com/polymorphic-relationships-laravel/
[2] https://laravaveldaily.com/post/polymorphic-relations-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-relationships
[6] https://www.linkedin.com/pulse/complete-guide-polymorphic-relationshipships-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-soses-of-morphs-column-type-in-laravel
[9] https://laravaveldaily.com/post/laravel-polymorphic-many-to-many-get-all-related-records