Laravel'deki `` Morphtomany '' ilişkisi, çoklu modellerin bir polimorfik ara tablo aracılığıyla tek bir model tipiyle bir ilişkiyi paylaşabileceği çok sayıda polimorfik ilişkiyi tanımlamak için kullanılır. Bu, her model çifti için ayrı pivot tablolarına ihtiyaç duymadan birçok farklı modelin esnek bir şekilde ortak bir modele birleşmesini sağlar.
Laravel'de `Morphtomany 'için ortak kullanım durumları
** 1. Etiketleme sistemleri
En yaygın kullanım durumlarından biri, aynı etiketlerle birden fazla farklı modelin (örneğin yayınlar, videolar, sayfalar) etiketlenebileceği bir etiketleme sistemi uygulamaktır. Her model etiketi ilişkisi için ayrı pivot tablolarına sahip olmak yerine, `Morphtomany 'tüm etiketlerin tek bir` etiket' tablosunda saklanmasına ve herhangi bir modelle polimorfik olarak ilişkilendirilmesine izin verir.
Örneğin, hem `Post` hem de` Video 'modelleri, etiketleri almak için `morphtomany' kullanan bir` tags () 'yöntemi olabilir ve `tag` modeli, onunla etiketlenmiş tüm yayınları veya videoları almak için` MorphedbyMany' 'kullanabilir [1] [5] [9].
** 2. Çeşitli İçerik Türlerini Kategorize Etme
Etiketlere benzer şekilde, kategoriler farklı içerik türleri arasında paylaşılabilir. Örneğin, hem makalelerin hem de ürünlerin kategorize edilmesi gerekebilir ve çok fazla olan polimorfik bir ilişki, yedek tablolar olmadan kategorileri paylaşmalarına izin verir.
** 3. Birden çok modele etiket veya öznitelik atama
Farklı modellere (örneğin, kullanıcılar, siparişler, ürünler) uygulanabilecek etiketleriniz, öznitelikleriniz veya özellikleriniz varsa, `Morphtomany` kullanarak bu etiketleri esnek bir şekilde herhangi bir model türüyle ilişkilendirmenize olanak tanır.
** 4. Birden çok kullanıcı türündeki kullanıcı rolleri veya izinler
Birden çok kullanıcı türüne sahip uygulamalarda (örn., Yönetici, Müşteri, Satıcı), roller veya izinler, roller tek bir tabloda yönetilir, ancak farklı kullanıcı modelleriyle ilişkili olacak şekilde "morphtomany" kullanılarak polimorfik olarak atanabilir [1].
** 5. Yorumları veya ekleri çoklu bir şekilde birden fazla modele bağlamak
Yorumlar genellikle bir ila çok polimorfik olmakla birlikte, birden fazla yorum veya ekin birden fazla modelle çok daha büyük bir şekilde ilişkili olduğu senaryolar olabilir. `` Morphtomany '' bu tür ilişkileri modellemek için kullanılabilir.
`Morphtomany 'nasıl çalışır
- `tag_id`,` taggable_id` ve `taggable_type` için sütunlar içeren tek bir pivot tablosu, örneğin` taggables`.
- `taggable_id` ve` taggable_type` sütunları Laravel'in etiketin hangi modelle ilişkili olduğunu belirlemesine izin verir.
- İlgili modellerde (ör. `Post`,` `video`),` $ this-> Morphtomany (Tag :: sınıf, 'taggable') `döndüren bir yöntem tanımlarsınız.
- `Tag` modelinde, o etiketle ilişkili belirli bir türün tüm modellerini almak için` `MorphedByMany '' kullanarak ters ilişkileri tanımlarsınız [1] [5].
Özet
`` Morphtomany '', çoklu modeli çok sayıda polimorfik tarzda ortak bir modelle ilişkilendirmek istediğinizde idealdir. Etiketleme sistemleri, kategorizasyon, birden çok kullanıcı türünde rol atama ve her çift için ayrı pivot tablolarına ihtiyaç duymadan ortak bir ilgili model setini paylaştığı herhangi bir senaryo için yaygın olarak kullanılır.
Bu yaklaşım, polimorfik çok fazla ilişkileri tek, zarif bir yapıya merkezileştirerek veritabanı tasarımını ve kod bakımını basitleştirir.
Alıntılar:
[1] https://blog.logrock.com/polymorphic-relationships-laravel/
[2] https://laraveldaily.com/post/polymorphic-relations-aravel-open-source-examples
[3] https://stackoverflow.com/questions/57522923/how-to-use-morphtomany
[4] https://stackoverflow.com/questions/432857779/laravel-polymorfic-relations-has-many-through
[5] https://laravel.com/docs/11.x/eloquent-relationships
[6] https://www.linkedin.com/pulse/complete-guide-polymorfic-relationships-morphs-sajith-madhubashana-rk1xc
[7] https://joedixon.co.uk/a-practical-use-case-for-raravels-polymorfic-relationships
[8] https://stackoverflow.com/questions/58811999/what-are-the-uses-of-morphs-solumn-type-in-laravel
[9] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-lalated-records