Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Apa saja kasus penggunaan umum untuk morphtomany di Laravel


Apa saja kasus penggunaan umum untuk morphtomany di Laravel


Hubungan `morphtomany` di Laravel digunakan untuk mendefinisikan banyak hubungan polimorfik, di mana banyak model dapat berbagi hubungan dengan tipe model tunggal melalui tabel perantara polimorfik. Ini memungkinkan hubungan fleksibel dari banyak model yang berbeda dengan model umum tanpa memerlukan tabel pivot terpisah untuk setiap pasangan model.

Kasus Penggunaan Umum untuk `Morphtomany` di Laravel

** 1. Sistem penandaan
Salah satu kasus penggunaan yang paling umum adalah menerapkan sistem penandaan di mana beberapa model yang berbeda (mis., Posting, video, halaman) dapat ditandai dengan tag yang sama. Alih-alih memiliki tabel pivot terpisah untuk setiap hubungan model-tag, `morphtomany` memungkinkan semua tag disimpan dalam tabel` tag` tunggal dan terkait secara polimorfik dengan model apa pun.
Misalnya, baik model `post` dan` video` dapat memiliki `tag ()` metode menggunakan `morphtomany` untuk mengambil tag, dan model` tag` dapat menggunakan `morphedbymany` untuk mendapatkan semua posting atau video yang ditandai dengan itu [1] [5] [9].

** 2. Mengkategorikan berbagai jenis konten
Mirip dengan tag, kategori dapat dibagikan di berbagai jenis konten. Misalnya, kedua artikel dan produk mungkin perlu dikategorikan, dan hubungan banyak-ke-banyak polimorfik memungkinkan mereka untuk berbagi kategori tanpa tabel yang berlebihan.

** 3. Menetapkan label atau atribut ke beberapa model
Jika Anda memiliki label, atribut, atau fitur yang dapat diterapkan pada model yang berbeda (mis., Pengguna, pesanan, produk), menggunakan `MorphTomani` memungkinkan Anda untuk mengaitkan label ini secara fleksibel dengan jenis model apa pun.

** 4. Peran atau izin pengguna di berbagai jenis pengguna
Dalam aplikasi dengan beberapa jenis pengguna (mis., Admin, pelanggan, vendor), peran atau izin dapat ditetapkan secara polimorfik menggunakan `MorphTomany` sehingga peran dikelola dalam satu tabel tetapi terkait dengan model pengguna yang berbeda [1].

** 5. Menghubungkan komentar atau lampiran ke beberapa model dengan cara yang banyak ke banyak
Sementara komentar sering kali merupakan polimorfik satu-ke-banyak, mungkin ada skenario di mana banyak komentar atau lampiran terkait dengan banyak model dengan banyak cara. `Morphtomany` dapat digunakan untuk memodelkan hubungan tersebut.

BAGAIMANA `MORPHTOMANY`

- Ini menggunakan tabel pivot tunggal, mis., `TagGables`, dengan kolom untuk` tag_id`, `taggable_id`, dan` taggable_type`.
- Kolom `taggable_id` dan` taggable_type` memungkinkan Laravel untuk menentukan model mana yang dikaitkan dengan tag.
- Pada model terkait (mis., `Post`,` Video`), Anda mendefinisikan metode yang mengembalikan `$ this-> morphtomany (tag :: class, 'taggable')`.
- Pada model `tag`, Anda mendefinisikan hubungan terbalik menggunakan` MorphedByMany` untuk mengambil semua model dari jenis yang terkait dengan tag itu [1] [5].

Ringkasan

`Morphtomany` sangat ideal ketika Anda ingin mengaitkan beberapa model dengan model umum dengan cara polimorfik banyak-ke-banyak. Ini banyak digunakan untuk sistem penandaan, kategorisasi, penugasan peran di beberapa jenis pengguna, dan skenario apa pun di mana banyak model yang berbeda berbagi serangkaian model terkait yang umum tanpa memerlukan tabel pivot terpisah untuk setiap pasangan.

Pendekatan ini menyederhanakan desain basis data dan pemeliharaan kode dengan memusatkan hubungan banyak-ke-banyak polimorfik menjadi satu struktur yang elegan.

Kutipan:
[1] https://blog.logrocket.com/polymorphic-relationships-laravel/
[2] https://laraveldaily.com/post/polymorphic-relations-laravel-open-source-examples
[3] https://stackoverflow.com/questions/57522923/how-to-use-morphtomany
[4] https://stackoverflow.com/questions/43285779/laravel-polymorphic-relations-has-many-hrough
[5] https://laravel.com/docs/11.x/eloquent-relationships
[6] https://www.linkedin.com/pulse/complete-guide-polymorphic-relationships-morphs-sajith-madhubashana-rk1xc
[7] https://joedixon.co.uk/a-practical-use-case-for-laravels-polymorphic-relationships
[8] https://stackoverflow.com/questions/58811999/what-are-the-uses-of-morphs-column-type-in-laravel
[9] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-related-records