Perbedaan antara `morphtomany` dan` morphedbymany` dalam hubungan banyak-ke-banyak polimorfik terutama terletak pada peran mereka dalam hubungan dan bagaimana struktur basis data mendukung mereka.
Struktur basis data
dalam banyak polimorfik
Hubungan banyak-ke-banyak polimorfik melibatkan tiga tabel utama:
- Dua tabel model (mis., `Post` dan` Tags`)
- Satu tabel pivot menengah (mis., `TagGables`)
Tabel pivot berisi setidaknya tiga kolom:
- `tag_id` (ID model terkait, mis. Tag)
- `taggable_id` (ID model yang terkait dengan tag, mis., Posting atau video)
- `taggable_type` (Nama kelas atau jenis model terkait, mis.,` App \ model \ post` atau `app \ model \ video`)
Struktur ini memungkinkan tabel pivot tunggal untuk menghubungkan beberapa model yang berbeda dengan model umum (tag dalam kasus ini) tanpa memerlukan tabel pivot terpisah untuk setiap kombinasi model [5] [9].
Peran `morphtomany`
- Digunakan pada model yang "memiliki" atau "memiliki" hubungan polimorfik.
- Menentukan hubungan dari perspektif model yang terkait dengan banyak model lainnya.
- Misalnya, dalam model `post`, metode` tag () `menggunakan` morphtomany` untuk mendapatkan semua tag yang terkait dengan posting itu.
- Metode ini menentukan model terkait dan "nama morph" (mis., `'TagGable'`), yang sesuai dengan kolom tabel pivot (` taggable_id` dan `taggable_type`).
- Ini menanyakan pemfilteran tabel pivot dengan ID dan tipe model saat ini untuk menemukan model terkait [5] [9].
Peran `morphedbymany`
- Digunakan pada model yang merupakan target hubungan polimorfik.
-Menentukan sisi terbalik dari hubungan banyak-ke-banyak polimorfik.
- Misalnya, dalam model `tag`, metode seperti` post () `atau` video () `gunakan` MorphedByMany` untuk mendapatkan semua posting atau video yang terkait dengan tag itu.
- Ini menentukan kelas model terkait dan nama morf yang sama yang digunakan dalam `morphtomany`.
- Metode ini menanyakan pemfilteran tabel pivot dengan tipe dan ID model terkait untuk menemukan semua model jenis yang terkait dengan model saat ini (tag) [5] [9].
Ringkasan Perbedaan dalam istilah basis data
- `Morphtomany` disebut pada model yang terkait dengan banyak orang lain, dan menggunakan kolom tabel pivot` taggable_id` dan `taggable_type` untuk memfilter catatan di mana` taggable_type` cocok dengan kelas model saat ini.
- `Morphedbymany` disebut pada model yang terkait dengan (terbalik), dan menggunakan tabel pivot untuk menemukan semua model dari jenis tertentu yang berhubungan kembali dengan model saat ini.
Kedua metode menggunakan tabel pivot yang sama tetapi berbeda dalam arah hubungan yang mereka wakili. Tabel pivot tetap sama, dengan kolom untuk ID dan tipe model terkait, memungkinkan beberapa jenis model untuk ditautkan secara polimorfik melalui tabel tunggal.
Pada dasarnya, `Morphtomany` mendefinisikan hubungan dari sisi" induk "atau" memiliki ", sementara` Morphedbymany` mendefinisikan hubungan terbalik dari sisi model "terkait", keduanya mengandalkan struktur tabel pivot polimorfik yang sama [5] [9] [1].
Kutipan:
[1] https://laracasts.com/discuss/channels/laravel/difference-between-standard-polymorphic-many-to-yny-polymorphic
[2] https://www.sitepoint.com/eloquents-polymorphic-relationships-explained/
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-related-records
[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/simplifying-yany-to-many-relationships-with-laravel-polymorphic-relations
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic-many-to-many-relationship-pivot-table-with-relationship-to-a
[9] https://blog.logrocket.com/polymorphic-relationships-laravel/