
Pendahuluan
Bayangin lagi ngerjain fitur sederhana, tapi pas mau nambahin sistem like di berbagai tipe konten, malah ribet sendiri karena harus bikin tabel satu-satu. Dulu saya sempat mikir buat bikin tabel post_likes, comment_likes, dan seterusnya, tapi itu jadi mimpi buruk pas aplikasi mulai berkembang. Di sinilah Laravel MorphMany jadi penyelamat karena kita cuma perlu satu tabel untuk menampung semua interaksi like di seluruh aplikasi.
Tips & Best Practices
Di banyak project, biasanya saya mulai dari menaruh logic di model yang tepat supaya controller tetap bersih. Pertama, pastikan pakai index yang benar pada kolom morphable agar query nggak melambat saat data sudah jutaan. Kedua, jangan pernah biarkan user melakukan spam request, jadi selalu gunakan database transaction untuk menjaga integritas data. Ketiga, saya sarankan selalu memanfaatkan Eloquent Event atau Observer untuk meng-update counter like secara otomatis daripada menghitung manual setiap kali load halaman.
Contoh Kode
Untuk settingannya, di model yang bisa di-like, tambahkan relasi morphMany seperti ini:
public function likes() { return $this->morphMany(Like::class, 'likeable'); }Sedangkan di controller, kita bisa langsung toggle status like user dengan cara yang ringkas:
$post->likes()->where('user_id', auth()->id())->delete() ?: $post->likes()->create(['user_id' => auth()->id()]);Variasi Implementasi
Kadang kita punya dua pilihan: pakai MorphMany yang praktis atau bikin tabel terpisah buat performa. Kalau aplikasinya sekelas sosial media raksasa, biasanya kita butuh tabel khusus karena indexing morph table bakal jadi bottleneck. Tapi untuk 90% project, MorphMany jauh lebih efisien dari sisi waktu development dan maintainability.
Kesalahan Umum
Pertama, sering lupa menambahkan morphs() di migration yang bikin kolom id dan type nggak ke-index otomatis. Kedua, membiarkan user melakukan like berkali-kali ke konten yang sama karena nggak ada constraint unique di tabel database. Ketiga, lupa menghapus relasi terkait saat konten induk dihapus, jadinya tabel likes dipenuhi sampah data. Keempat, terlalu sering melakukan count() di query list utama yang bikin database kewalahan. Kelima, mengabaikan penggunaan withCount() dari Laravel yang sebenarnya jauh lebih cepat daripada manual query.
Ringkasan
Selesai ngoding fitur ini, biasanya saya merasa puas karena bisa menghemat puluhan baris kode. MorphMany di Laravel itu bukan cuma soal fitur, tapi soal cara kita melihat relasi data yang sebenarnya fleksibel. Semoga ini bikin project kamu jadi lebih rapi dan gampang dikelola ke depannya!
Komentar
Posting Komentar