Der Unterschied zwischen "Morphtomanie" und "MorphedBymany" in polymorphen viel-zu-Viele-Beziehungen in Laravel in Laravel liegt hauptsächlich in ihren Rollen in der Beziehung und wie die Datenbankstruktur sie unterstützt.
Datenbankstruktur in polymorphen Vielfachen viele zu viele
Polymorphe Viele zu viele Beziehungen umfassen drei Haupttabellen:
- Zwei Modelltabellen (z. B. `post` und` Tags`)
- Eine Zwischenpivot -Tabelle (z. B. `Taggables`)
Die Pivot -Tabelle enthält mindestens drei Spalten:
- `tag_id` (die ID des zugehörigen Modells, z. B. Tag)
- `taggable_id` (Die ID des Modells, das mit dem Tag in Verbindung steht, z. B. Post oder Video)
- `taggable_type` (der Klassenname oder Typ des zugehörigen Modells, z. B.` app \ models \ post` oder `app \ models \ Video`)
Diese Struktur ermöglicht es einer einzelnen Pivot -Tabelle, mehrere verschiedene Modelle mit einem gemeinsamen Modell (in diesem Fall Tags) in Beziehung zu setzen, ohne separate Pivot -Tabellen für jede Modellkombination zu benötigen [5] [9].
Rolle der "Morphtomanie"
- Wird auf dem Modell verwendet, das "besitzt" oder "hat" die polymorphe Beziehung.
- Definiert die Beziehung aus der Perspektive des Modells, das mit vielen anderen Modellen zusammenhängt.
- In einem "Post" -Modell verwendet die `Tags ()` Methode beispielsweise "Morphtomany", um alle mit diesem Beitrag verknüpften Tags zugeordnet zu erhalten.
- Diese Methode gibt das zugehörige Modell und den "Morphnamen" (z. B. `'Taggable'`) an, der den Pivot -Tabellenspalten entspricht (` Taggable_id` und `Taggable_type`).
- Es wird die Pivot -Tabellenfilterung nach der ID und dem Typ des aktuellen Modells abfragen, um verwandte Modelle zu finden [5] [9].
Rolle von "MorphedByMany"
- Wird auf dem Modell verwendet, das das Ziel der polymorphen Beziehung ist.
-Definiert die umgekehrte Seite der polymorphen Vielfalt viele zu viele Beziehung.
- Zum Beispiel im "Tag" -Modell Methoden wie "posts ()` oder "videos ()" Verwenden Sie "MorphedByMany", um alle Beiträge oder Videos diesem Tag zugeordnet zu erhalten.
- Es gibt die zugehörige Modellklasse und denselben Morphnamen an, der in "Morphtomany" verwendet wird.
- Diese Methode filteriert die Pivot -Tabellenfilterung nach dem Typ und der ID des verwandten Modells, um alle Modelle dieses Typs zu finden, die dem aktuellen Modell (Tag) [5] [9] zugeordnet sind.
Zusammenfassung der Unterschiede in den Datenbankbegriffen
- "Morphtomany" wird auf das Modell aufgerufen, das mit vielen anderen zusammenhängt, und verwendet die Pivot -Tabellenspalten `taggable_id` und` Taggable_type`, um Datensätze zu filtern, bei denen die Klasse des aktuellen Modells `Taggable_type` übereinstimmt.
- "MorphedByMany" wird auf das Modell aufgerufen, das mit (dem Inversen) zusammenhängt, und verwendet die Pivot -Tabelle, um alle Modelle eines bestimmten Typs zu finden, die sich auf das aktuelle Modell beziehen.
Beide Methoden verwenden dieselbe Pivot -Tabelle, unterscheiden sich jedoch in Richtung der Beziehung, die sie darstellen. Die Pivot -Tabelle bleibt gleich mit Spalten für die ID und den Typ des zugehörigen Modells, sodass mehrere Modelltypen durch eine einzelne Tabelle polymorph verknüpft werden können.
Im Wesentlichen definiert die "Morphtomanie" die Beziehung aus der "Eltern" oder "besitzen" Modellseite, während "MorphedBymany" die inverse Beziehung von der "verwandten" Modellseite definiert, die beide auf derselben polymorphen Pivot -Tabellenstruktur stützen [5] [9] [1].
Zitate:
[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://laravaveldaily.com/post/laravel-polymorphic-many-to-many-get-all-related-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/simplifing-many-to-many-relationships-with-laravel-polymorphic-Relations
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic- many-to-many-relationship-pivot-table-with-relationship-to-a
[9] https://blog.logrocket.com/polymorphic-relationships-laravel/