La différence entre «Morphtomany» et «MorphedByMany» dans les relations polymorphes de Laravel polymorphes résident principalement dans leur rôle dans la relation et comment la structure de la base de données les soutient.
Structure de la base de données en plusieurs à plusieurs personnes polymorphes
Les relations polymorphes de plusieurs à plusieurs impliquent trois tables principales:
- Deux tables de modèle (par exemple, `poteaux` et« tags »)
- une table de pivot intermédiaire (par exemple, `Taggables`)
La table de pivot contient au moins trois colonnes:
- `Tag_id` (l'ID du modèle associé, par ex., tag)
- `Taggable_id` (l'ID du modèle lié à la balise, par exemple, publication ou vidéo)
- `taggable_type` (le nom de classe ou le type du modèle associé, par exemple,` app \ modèles \ post` ou `app \ modèles \ video`)
Cette structure permet à une seule table de pivot de relier plusieurs modèles différents à un modèle commun (étiquettes dans ce cas) sans avoir besoin de tables de pivot distinctes pour chaque combinaison de modèle [5] [9].
Rôle de «Morphtomany»
- Utilisé sur le modèle qui "possède" ou "a" la relation polymorphe.
- Définit la relation du point de vue du modèle lié à de nombreux autres modèles.
- Par exemple, dans un modèle «post», la méthode `tags ()» utilise «morphtomany» pour obtenir toutes les balises associées à ce post.
- Cette méthode spécifie le modèle associé et le "nom de morph" (par exemple, `'Taggable' '), qui correspond aux colonnes de table de pivot (` taggable_id` et `taggable_type`).
- Il interroge le filtrage de la table de pivot par l'ID et le type du modèle actuel pour trouver des modèles connexes [5] [9].
Rôle de «MorphedBymany»
- Utilisé sur le modèle qui est la cible de la relation polymorphe.
- Définit le côté inverse de la relation polymorphe de plusieurs à plusieurs.
- Par exemple, dans le modèle `Tag`, des méthodes comme` Posts () `ou` vidéos () `Utilisez` MorphEdByMany »pour obtenir tous les publications ou vidéos associées à cette balise.
- Il spécifie la classe de modèle associée et le même nom de morph utilisé dans «morphtomany».
- Cette méthode interroge le filtrage de la table de pivot par le type et l'ID du modèle associé pour trouver tous les modèles de ce type associés au modèle actuel (TAG) [5] [9].
Résumé des différences dans les termes de la base de données
- `morphtomany` est appelé sur le modèle lié à beaucoup d'autres, et il utilise les colonnes de table pivot` Taggable_id` et `Taggable_type` pour filtrer les enregistrements où le` Taggable_type` correspond à la classe du modèle actuel.
- `MorphedByMany` est appelé sur le modèle qui est lié à (l'inverse), et il utilise la table de pivot pour trouver tous les modèles d'un type spécifique qui se rapporte au modèle actuel.
Les deux méthodes utilisent le même tableau de pivot mais diffèrent dans la direction de la relation qu'elles représentent. La table de pivot reste la même, avec des colonnes pour l'ID et le type du modèle associé, permettant à plusieurs types de modèles d'être liés polymorphiquement via une seule table.
Essentiellement, «Morphtomany» définit la relation du côté modèle «parent» ou «possédant», tandis que «MorphedByMany» définit la relation inverse du côté du modèle «associé», tous deux s'appuyant sur la même structure de table de pivot polymorphe [5] [9] [1].
Citations:
[1] https://laracasts.com/discuss/channels/laravel/difference-between-standard-polymorphic-many-to-many-polymorphic
[2] https://www.sitepoint.com/elobents-polymorphic-lalationdships-explated/
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-lated-records
[4] https://laracasts.com/discuss/channels/elognent/polymorphic-many-to-many-lalation-to-multiple-models
[5] https://laravel.com/docs/11.x/eloquent-relationshipship
[6] https://docs.octobercms.com/3.x/extend/database/relations.html
[7] https://simple-code.agency/blog/development/simplifiling-many-to-many-lalationds-with-laravel-polymorphic-ralalation
[8] https://stackoverflow.com/questions/68073778/Laravel-polymorphic-many-to-many-lalationsehip-pivot-table-with-relationning-to-a
[9] https://blog.logrocket.com/polymorphic-lalationnships-laravel/