La relation «morphtomany» dans Laravel est utilisée pour définir des relations polymorphes de plusieurs à plusieurs, où plusieurs modèles peuvent partager une relation avec un type de modèle unique via une table intermédiaire polymorphe. Cela permet une association flexible de nombreux modèles différents à un modèle commun sans avoir besoin de tables de pivot distinctes pour chaque paire de modèles.
Cas d'utilisation courants pour «morphtomany» dans Laravel
** 1. Systèmes de marquage
L'un des cas d'utilisation les plus courants consiste à implémenter un système de balise où plusieurs modèles différents (par exemple, publications, vidéos, pages) peuvent être marqués avec les mêmes balises. Au lieu d'avoir des tables de pivot séparées pour chaque relation de modèle de modèle, «MorPhtomany» permet de stocker toutes les balises dans un seul tableau «Tags» et associé polymorphiquement à n'importe quel modèle.
Par exemple, les modèles `Post` et« Video »peuvent avoir une méthode` Tags () »utilisant` morphtomany »pour récupérer des balises, et le modèle` Tag »peut utiliser` MorphedByMany »pour obtenir tous les articles ou vidéos tagués avec [1] [5] [9].
** 2. Catégoriser divers types de contenu
Semblable aux balises, les catégories peuvent être partagées sur différents types de contenu. Par exemple, les articles et les produits pourraient devoir être classés, et une relation polymorphe de plusieurs à plusieurs leur permet de partager des catégories sans tables redondantes.
** 3. Attribuer des étiquettes ou des attributs à plusieurs modèles
Si vous avez des étiquettes, des attributs ou des fonctionnalités qui peuvent s'appliquer à différents modèles (par exemple, les utilisateurs, les commandes, les produits), l'utilisation de «MorPhtomany» vous permet d'associer ces étiquettes de manière flexible à n'importe quel type de modèle.
** 4. Rôles ou autorisations utilisateur sur plusieurs types d'utilisateurs
Dans les applications avec plusieurs types d'utilisateurs (par exemple, admin, client, fournisseur), des rôles ou des autorisations peuvent être attribués de manière polymorphique à l'aide de «MorPhtomany» afin que les rôles soient gérés dans un seul tableau mais liés à différents modèles d'utilisateurs [1].
** 5. Lier des commentaires ou des pièces jointes à plusieurs modèles de manière à plusieurs pour plusieurs
Bien que les commentaires soient souvent polymorphes un-à-plusieurs, il pourrait y avoir des scénarios où plusieurs commentaires ou pièces jointes sont liées à plusieurs modèles de manière plusieurs à plusieurs. «Morphtomany» peut être utilisé pour modéliser de telles relations.
Comment fonctionne `morphtomany`
- Il utilise une seule table de pivot, par exemple, `Taggables`, avec des colonnes pour` Tag_id`, `Taggable_id` et` Taggable_type`.
- Les colonnes `taggable_id` et` taggable_type` permettent à Laravel de déterminer à quel modèle la balise est associée.
- Sur les modèles connexes (par exemple, `Post`,` Vidéo`), vous définissez une méthode qui renvoie `$ this-> morphtomany (tag :: class, 'taggable')`.
- Sur le modèle «Tag», vous définissez des relations inverses en utilisant «MorphedByMany» pour récupérer tous les modèles d'un type donné associé à cette balise [1] [5].
Résumé
«Morphtomany» est idéal lorsque vous souhaitez associer plusieurs modèles à un modèle commun de manière polymorphe de plusieurs à plusieurs. Il est largement utilisé pour le marquage des systèmes, la catégorisation, l'attribution de rôles sur plusieurs types d'utilisateurs et tout scénario où de nombreux modèles différents partagent un ensemble commun de modèles connexes sans avoir besoin de tables de pivot distinctes pour chaque paire.
Cette approche simplifie la conception de la base de données et la maintenance du code en centralisant les relations polymorphes de plusieurs à plusieurs en une seule structure élégante.
Citations:
[1] https://blog.logrocket.com/polymorphic-lalationnships-laravel/
[2] https://laraveldaily.com/post/polymorphic-lalations-laravel-open-source-examples
[3] https://stackoverflow.com/questions/57522923/how-to-use-morphtomany
[4] https://stackoverflow.com/questions/43285779/laravel-polymorphic-lations-has-many-harghrou
[5] https://laravel.com/docs/11.x/eloquent-relationshipship
[6] https://www.linkedin.com/pulse/compte-guide-polymorphic-lalationdships-morphs-sajith-madhubashana-rk1xc
[7] https://joedixon.co.uk/a-practical-use-ase-for-laavels-polymorphic-relationships
[8] https://stackoverflow.com/questions/58811999 /
[9] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-lié