A diferença entre `morftomany` e` morfedbymany 'em relacionamentos polimórficos de Laravel, muitos para muitos, está principalmente em seus papéis no relacionamento e como a estrutura do banco de dados os suporta.
Estrutura do banco de dados em Many-to-Many polimórfico
Relacionamentos polimórficos de muitos para muitos envolvem três mesas principais:
- Duas tabelas de modelo (por exemplo, `postagens` e` tags`)
- Uma tabela de articulação intermediária (por exemplo, `taggables`)
A tabela Pivot contém pelo menos três colunas:
- `tag_id` (o ID do modelo relacionado, por exemplo, tag)
- `taggable_id` (o ID do modelo relacionado à tag, por exemplo, postagem ou vídeo)
- `taggable_type` (o nome da classe ou tipo do modelo relacionado, por exemplo,` App \ Models \ post` ou `App \ Models \ Video`)
Essa estrutura permite que uma única tabela de pivô relacionar vários modelos diferentes com um modelo comum (tags neste caso) sem precisar de tabelas de articulação separadas para cada combinação de modelo [5] [9].
papel de `morphtomany`
- usado no modelo que "possui" ou "tem" o relacionamento polimórfico.
- Define o relacionamento da perspectiva do modelo relacionado a muitos outros modelos.
- Por exemplo, em um modelo `post`, o método` tags () `usa` morphtomany` para obter todas as tags associadas a essa postagem.
- Este método especifica o modelo relacionado e o "nome do morph" (por exemplo, `'taggable'), que corresponde às colunas da tabela pivot (` taggable_id` e `taggable_type`).
- Consulta a filtragem da tabela pivô pelo ID e tipo do modelo atual para encontrar modelos relacionados [5] [9].
papel de `morphedbymany`
- Usado no modelo que é o alvo da relação polimórfica.
-Define o lado inverso do relacionamento polimórfico de muitos para muitos.
- Por exemplo, no modelo `tag`, métodos como` posts () `ou` videos () `use` morphedbymany` para obter todas as postagens ou vídeos associados a essa tag.
- Especifica a classe de modelo relacionada e o mesmo nome de morph usado em `morftomany`.
- Este método consulta a filtragem da tabela pivô pelo tipo e ID do modelo relacionado para encontrar todos os modelos desse tipo associados ao modelo atual (TAG) [5] [9].
Resumo das diferenças nos termos do banco de dados
- `Morphtomany` é chamado no modelo relacionado a muitos outros e usa as colunas da tabela pivô` taggable_id` e `taggable_type` para filtrar os registros onde a` taggable_type` corresponde à classe do modelo atual.
- `MorphedbyMany` é chamado no modelo que está sendo relacionado (o inverso) e usa a tabela pivô para encontrar todos os modelos de um tipo específico que se relaciona de volta ao modelo atual.
Ambos os métodos usam a mesma tabela de pivô, mas diferem na direção da relação que eles representam. A tabela pivô permanece a mesma, com colunas para o ID e o tipo do modelo relacionado, permitindo que vários tipos de modelo sejam vinculados polimorficamente através de uma única tabela.
Em essência, a `morftomany` define o relacionamento do lado do modelo" pai "ou" possuindo ", enquanto` morphedbyMany` define o relacionamento inverso do lado do modelo "relacionado", ambos dependendo da mesma estrutura de tabela pivô polimórfica [5] [9] [1].
Citações:
[1] https://laracasts.com/discuss/channels/laravel/difference-between-standard-polymorphic-many-to-many-polymorphic
[2] https://www.sitepoint.com/eloquents-polymorphic-Relationships-expling/
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-ll-relatário-registros
[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/simplify-many-to-many-relationshipsships-with-laravel-polimórficos
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic-many-to-many-relation-relation-tot-table-with-relation-to-a
[9] https://blog.logrocket.com/polymorphic-relationships-laravel/