Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Morphtomany, veritabanı yapısı açısından morphedbymany'den nasıl farklıdır?


Morphtomany, veritabanı yapısı açısından morphedbymany'den nasıl farklıdır?


Laravel polimorfik çok fazla ilişkideki `` Morphtomany '' ve 'Morphedbymany' arasındaki fark, öncelikle ilişkideki rollerinde ve veritabanı yapısının bunları nasıl desteklediğidir.

Polimorfikte çok sayıda veritabanı yapısı

Polimorfik çok fazla ilişkiler üç ana tablo içerir:

- İki model tablo (örneğin, `direkler 've` tags')
- Bir ara pivot tablosu (örneğin, `taggables ')

Pivot tablosu en az üç sütun içerir:

- `tag_id` (ilgili modelin kimliği, örneğin etiket)
- `taggable_id` (etiketle ilgili modelin kimliği, örneğin yazı veya video)
- `taggable_type` (ilgili modelin sınıf adı veya türü, örn.

Bu yapı, her model kombinasyonu için ayrı pivot tablolarına ihtiyaç duymadan tek bir pivot tablosunun birden fazla farklı modeli ortak bir modele (bu durumda etiketler) ilişkilendirmesine izin verir [5] [9].

`` Morphtomany '' rolü

- Polimorfik ilişkiye "sahip" veya "sahibi" modelde kullanılır.
- İlişkiyi diğer birçok modelle ilgili modelin perspektifinden tanımlar.
- Örneğin, bir `post` modelinde,` tags () `yöntemi, tüm etiketleri bu yayınla ilişkili tüm etiketleri almak için` morphtomany 'kullanır.
- Bu yöntem, pivot tablo sütunlarına (`taggable_id` ve` taggable_type`) karşılık gelen ilgili modeli ve "morph adı" (örn., `` Taggable'`) (örn. '' Taggable '') belirtir.
- İlgili modelleri bulmak için geçerli modelin kimliği ve türüne göre pivot tablo filtrelemesini sorgular [5] [9].

`` MorphedbyMany '' rolü

- Polimorfik ilişkinin hedefi olan modelde kullanılır.
-Polimorfik çok fazla ilişkinin ters tarafını tanımlar.
- Örneğin, `tag` modelinde, bu etiketle ilişkili tüm yayınları veya videoları almak için` post () `veya` videolar () `` morphedbymany 'gibi yöntemler.
- İlgili model sınıfını ve `Morphtomany'de kullanılan aynı morph adını belirtir.
- Bu yöntem, geçerli model (TAG) ile ilişkili tüm modelleri bulmak için ilgili modelin türüne ve kimliğine göre pivot tablosu filtrelemesini sorgular [5] [9].

Veritabanı terimlerindeki farklılıkların özeti

- `` Morphtomany '', diğerleriyle ilgili modelde çağrılır ve `taggable_type`in mevcut modelin sınıfıyla eşleştiği kayıtları filtrelemek için` taggable_id` ve `taggable_type` pivot tablo sütunlarını kullanır.
- `` MorphedbyMany '' ile ilişkili olan modelde (Ters) çağrılır ve mevcut modele dayanan belirli bir türün tüm modellerini bulmak için pivot tablosunu kullanır.

Her iki yöntem de aynı pivot tablosunu kullanır, ancak temsil ettikleri ilişki yönünde farklılık gösterir. Pivot tablosu, ilgili modelin kimliği ve türü için sütunlarla aynı kalır ve birden fazla model türünün polimorfik olarak tek bir tablodan bağlantılı olmasına izin verir.

Özünde, `` Morphtomany '' ilişkiyi "ebeveyn" veya "sahip olma" model tarafından tanımlarken, `` MorphedbyMany '', her ikisi de aynı polimorfik pivot tablo yapısına dayanarak "ilişkili" model tarafındaki ters ilişkiyi tanımlar [5] [9] [1].

Alıntılar:
[1] https://laracasts.com/discuss/channels/laravel/difference-beton-standard-polymorphic-many-to-many-polymorfic
[2] https://www.sitepoint.com/eloquents-polymorphic-relationships-splained/
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-lalated-records
[4] https://laracasts.com/discuss/channels/eloquent/polymorphic-many-to-ny-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/decelopment/simplifians-any-to-many-relationships-with-lavel-polymorfic-relations
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic-many-to-any-relationship-pivot-fırtar-
[9] https://blog.logrock.com/polymorphic-relationships-laravel/