Langsung ke konten utama

Cara Implementasi Fitur Like & Unlike di Laravel dengan MorphMany

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

Postingan populer dari blog ini

Fungsi lain tombol penerima panggilan di headset

Kegunaan tombol yang berada di headset utamanya adalah untuk menerima panggilan dan pause panggilan. Dan headset itu sendiri, kadang juga digunakan untuk mendengarkan music, digunakan bersama saat main game, supaya suara yang dikeluarkan oleh gadget tidak terlalu keras sehingga mengurangi beban gadget. Dengan mengurangi beban gadget, ada beberapa yang beranggapan kalau itu akan menghemat batere.

Cara Reset Password Database MySQL Menggunakan Laragon

Cara Reset Password Database MySQL Menggunakan Laragon Laragon adalah salah satu lingkungan pengembangan lokal (local development environment) yang populer di antara para pengembang web. Dalam beberapa kasus, mungkin kita perlu mereset password database MySQL pada Laragon jika lupa password atau untuk alasan keamanan tertentu. Berikut adalah langkah-langkah yang dapat kita ikuti untuk melakukan reset password database MySQL menggunakan Laragon:

Apa Itu R dan L di Headset? Ini Dia Perbedaan dan Fungsinya yang Perlu Anda Ketahui

Arti R dan L di Headset: Apa Perbedaannya? Headset adalah alat yang digunakan untuk mendengarkan suara dari sumber audio seperti ponsel, komputer, atau pemutar musik. Headset biasanya terdiri dari dua bagian, yaitu earphone yang dimasukkan ke dalam telinga dan mikrofon yang digunakan untuk berbicara. Pada earphone, kita sering melihat ada tulisan R dan L. Apa arti dan perbedaan dari kedua huruf tersebut?