MongoDB adalah jenis database NoSQL yang berarti setiap barisnya tidak memiliki struktur yang konsisten baik dari jumlah kolom ataupun jenis kolom. Pemanfaatan MongoDB banyak digunakan untuk penyimpanan data yang bersifat masif dan transaksional. Bagi saya yang programmer laravel dan sudah terbiasa dengan SQL, bermigrasi ke NoSQL mempunyai tantangan tersendiri. Syukurnya saat ini MongoDB sudah memberi dukungan penuh ke laravel https://github.com/mongodb/laravel-mongodb yang dulunya disupport oleh komunitas. Tantangan implementasi adalah apakah merubah behavior dan struktur pengembangan menjadi full NoSQL atau tetap menggunakan fitur-fitur unggul laravel seperti relation namun membuat MongoDB tetap seperti MySQL. Jujur secara hitung-hitungan saya tidak rela melepas fitur-fitur unggulan laravel. Karena selain pengerjaan cepat, code yang saya bangun juga lebih rapi dan readable. Masalah terjadi saat kita mendeklarasikan relation dengan MongoDB.Ini adalah contoh dekalrasi relation HasMany pada dua collection yaitu Tagihan dan TagihanItem dengan foreign_key = “tagihan_id”. Relation ini bekerja sempurna selama tagihan_id menggunakan tipe data String.Di sisi lain MongoDB punya fitur aggregation yang sangat bagus. Dalam fitur aggregation kita dapat melakukan summary, count, average, dengan berbagai kondisi. Selain itu yang juga penting kita bisa melakukan $lookup ke collection lain saat aggregation (mirip seperti join di SQL). Namun yang menjadi masalah adalah foreign_key harus bertipe data ObjectId. Yap ini dia dilemanya, saat kita performing select data dengan relation kita perlu foreign_key String namun saat aggregation kita perlu ObjectId. Masalah sudah dapat, lalu apa yang harus dilakukan. mongodb bisa perform aggregation $lookup dengan tipe data String namun belum berhasil saya lakukan baik di Laravel ataupun raw query MongoDBMongoDB menyarankan menyimpan foreign_key sebagai ObjectId ketimbang String untuk efisiensi storageAkhirnya saya membuat kesimpulan untuk mengextend package Laravel-MongoDB dan membuat fungsi sendiri. Dengan harapan tidak mengganggu fungsi-fungsi lain yang telah stable. Kalian bisa buat langsung dalam modelnya, atau membuat class baru yang kemudian di-extend oleh model kalian, atau bisa juga seperti saya membuat Trait. Untuk fungsi hasManyObjectId saya copypaste sepenuhnya dari fungsi hasMany. Tidak ada perubahan yang saya buat karena yang terpenting return-nya yang saya arahkan ke custom class HasMany. Yang terakhir pada custom class HasMany saya mengoverride fungsi addEagerConstraints agar setiap keys yang didapat dari foreign dapat diiterasi dan diconvert menjadi ObjectId sebelum dieksekusi laravel menggunakan query whereIn Yak demikian dilema singkat saya dengan tambahan code ini (mudah-mudahan tidak ada major code breaks update) saya bisa membuat relasi kepada kolom string ataupun kolom ObjectId pada Laravel-MongoDB. Kedepannya akan saya tambahkan agar dapat support hasOne, belongTo, belongsToMany, dst. Kedepannya saya harap ada juga yang membuatkan pull request agar apapun tipe datanya tetap bisa kita eksekusi menggunakan satu fungsi. Wassalam
Langkah 1 : Prasyarat - Versi php – 8 - Versi komposer – 2Hal pertama yang perlu anda lakukan adalah menginstall composer. Anda dapat menginstal Komposer dari tautan berikut : https://getcomposer.org/ Setelah instalasi komposer, jalankan perintah di bawah ini di terminal Anda.1ComposerTampilannya seperti berikut :Langkah 2: Setelah berhasil menginstal PHP dan Composer, Anda perlu membuat proyek Laravel baru melalui Composer . Jalankan perintah di bawah ini1composer create-project laravel/laravel blog-appHasilnya akan seperti ini :Langkah 3: Setelah berhasil membuat proyek, mulai server pengembangan lokal Laravel menggunakan perintah servis Artisan CLI Laravel12cd blog-appphp artisan serveMaka hasilnya adalah :Sekarang salin tautan ini dan tempel ke browser Anda. Ini akan terlihat seperti ini.Selamat Ngoding !
Pilih tag di bawah ini untuk memfilter hasil
Perhitungan dalam satu tahun terakhir. Tidak termasuk like dari penulis artikel.