Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Quais são os casos de uso comum para a morftomania em Laravel


Quais são os casos de uso comum para a morftomania em Laravel


O relacionamento `morftomany` em Laravel é usado para definir relações polimórficas muitas para muitas, onde vários modelos podem compartilhar um relacionamento com um único tipo de modelo através de uma tabela intermediária polimórfica. Isso permite uma associação flexível de muitos modelos diferentes para um modelo comum sem precisar de tabelas de articulação separadas para cada par de modelos.

casos de uso comuns para `morftomany` em Laravel

** 1. Sistemas de marcação
Um dos casos de uso mais comuns é a implementação de um sistema de marcação em que vários modelos diferentes (por exemplo, postagens, vídeos, páginas) podem ser marcados com as mesmas tags. Em vez de ter tabelas de articulação separadas para cada relacionamento de marca de modelo, `Morphtomany` permite que todas as tags sejam armazenadas em uma única tabela` tags` e associadas polimorficamente a qualquer modelo.
Por exemplo, os modelos `post` e` vídeo` podem ter um método `tags ()` usando `morphtomany` para recuperar tags, e o modelo` tag` pode usar `morphedbymany` para obter todos os posts ou vídeos marcados com ele [1] [5] [9].

** 2. Categorizando vários tipos de conteúdo
Semelhante às tags, as categorias podem ser compartilhadas em diferentes tipos de conteúdo. Por exemplo, os artigos e os produtos podem precisar ser categorizados, e uma relação polimórfica de muitos para muitos permite que eles compartilhem categorias sem tabelas redundantes.

** 3. Atribuir rótulos ou atributos a vários modelos
Se você possui rótulos, atributos ou recursos que podem se aplicar a diferentes modelos (por exemplo, usuários, pedidos, produtos), o uso de `Morphtomany` permite que você associe esses rótulos com flexibilidade a qualquer tipo de modelo.

** 4. Funções ou permissões do usuário em vários tipos de usuário
Em aplicativos com vários tipos de usuário (por exemplo, administrador, cliente, fornecedor), funções ou permissões podem ser atribuídas polimorficamente usando `morphtomany`, para que as funções sejam gerenciadas em uma única tabela, mas relacionadas a diferentes modelos de usuário [1].

** 5. Vincular comentários ou anexos a vários modelos de uma maneira muitos para muitos
Embora os comentários sejam frequentemente polimórficos, pode haver cenários em que vários comentários ou anexos se relacionam a vários modelos de uma maneira muitos para muitos. `Morphtomany` pode ser usado para modelar tais relacionamentos.

como `morphtomany` funciona

- Ele usa uma única tabela de pivô, por exemplo, `taggables`, com colunas para` tag_id`, `taggable_id` e` taggable_type`.
- As colunas `taggable_id` e` taggable_type` permitem ao Laravel determinar a qual modelo a tag está associada.
- Nos modelos relacionados (por exemplo, `post`,` vídeo`), você define um método que retorna `$ this-> morphtomany (tag :: classe, 'taggable')`.
- No modelo `tag`, você define relacionamentos inversos usando` morphedbymany` para recuperar todos os modelos de um determinado tipo associado a essa tag [1] [5].

Resumo

`Morphtomany` é ideal quando você deseja associar vários modelos a um modelo comum de uma maneira polimórfica de muitos para muitos. É amplamente utilizado para sistemas de marcação, categorização, atribuição de função em vários tipos de usuários e qualquer cenário em que muitos modelos diferentes compartilhem um conjunto comum de modelos relacionados sem precisar de tabelas pivôs separadas para cada par.

Essa abordagem simplifica o design do banco de dados e a manutenção de código, centralizando os relacionamentos polimórficos de muitos para muitos em uma única estrutura elegante.

Citações:
[1] https://blog.logrocket.com/polymorphic-relationships-laravel/
[2] https://laraveldaily.com/post/polymorphic-relations-laravel-pen-source-example
[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-relationsshipss-morphs-sajith-madhubashana-rk1xc
[7] https://joedixon.co.uk/a-practical-use-se-for-laravels-polymorphic-relations
[8] https://stackoverflow.com/questions/588119999/what-are-the-uses-of-morphs-olumn-type-s--laravel
[9] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-ll-relatário-registros