Cara Menghubungkan Laravel dengan MongoDB dan membuat aplikasi CRUD

Cara Menghubungkan Laravel dengan MongoDB dan membuat aplikasi CRUD
Konten Halaman

Berikut ini Cara Menghubungkan PHP Laravel dengan MongoDB untuk membuat CRUD. Keperluan mongodb untuk data yang bersifat NoSQL atau Not Only SQL sehingga data tidak harus memiliki relasi atau data normalisasi database struktur.

Setelah beberapa waktu yang lalu sudah membuat post mengenai Cara Install MongoDB di Windows dan Cara Install Laravel di Windows maka di kesempatan kali ini berkesempatan membagi cara Cara Menghubungkan Laravel dengan MongoDB hingga membuat aplikasi CRUD dengan database MongoDB.

Menghubungkan Laravel dengan MongoDB Database

Untuk menghubungkan database MongoDB dengan Laravel kita membutuhkan library tambahan dan extension PHP. di sini yang menggunakan PHP di Windows 10.

Mengaktifkan extension PHP database MongoDB

sebelum mengaktifkan extension MongoDB di PHP kalian download terlebih ke halaman https://pecl.php.net/package/mongodb

klik tombol DLL sesuaikan versinya diusahakan paling terbaru download extension mongodb php

atau jika bingung bisa langsung ke https://pecl.php.net/package/mongodb/1.13.0/windows

kemudian scroll bagian bawah, kemudian download sesuaikan versi dengan PHP, disini saya menggunakan versi 7.4 dan sistem operasi windows 10 64bit

download extension mongodb php sesuai versi windows 10 d64bit

pilih yang mana saja Non Thread Safe (NTS) atau Thread Safe (TS) jika kebutuhan untuk belajar di lokal dan bukan untuk release production, jika iya maka pilih Thread Safe (TS)

setelah di ekstrak maka kita extrak dimana saja dengan isi file php_mongodb.dll dan php_mongodb.pdb ekstrak file download extension mongodb php .dll pilih file php_mongodb.dll dan php_mongodb.pdb lalu copy paste simpan ke folder ext PHP biasanya file PHP dengan XAMPP ada di C:\xampp\php\ext atau jika kalian menggunakan Laragon bisa di copy dan di paste di folder path C:\laragon\bin\php\php-7.4.19-Win32-vc15-x64\ext

jika menggunakan PHP XAMPP copy dan paste di folder C:\xampp\php\ext menginstall extension mongodb php di laragon

dan jika menggunakan PHP Laragon copy paste C:\laragon\bin\php\php-7.4.19-Win32-vc15-x64\ext menginstall extension mongodb php di xampp

sesuaikan versinya php-7.4.19-Win32-vc15-x64 adalah versi di komputer saya jika tidak ada maka sesuaikan dengan php di komputer teman teman

selanjutnya mengedit php.ini bisanya berada di folder PHP versi (XAMPP) C:\xampp\php\php.ini atau (Laragon) C:\laragon\bin\php\php-7.4.19-Win32-vc15-x64\php.ini

ubah file php.ini dengan tambahan extension=php_mongodb.dll usahakan di bawah tulisan Dynamic Extensions supaya rapi mudah dicari menginstall extension mongodb php ubah php.ini

setelah ditambahkan close program XAMPP atau Laragon teman teman dan start ulang kembali HTTP server Apache nya dan cek dengan membuat file php yang berisikan berikut:

<?php

print phpinfo();

?>

lalu buka filenya dengan menjalankan php di http browser seperti berikut download-extension-success-running-windows10.jpg

menginstall extension mongodb php berhasil di phpinfo

jika berhasil membuka halaman seperti gambar di atas makan temukan kata kunci mongo dengan CTRL + F dan ketikan mongo. jika menemukan maka mongoDB berhasil berjalan di php dan siap digunakan untuk Laravel

Menginstal Library di Laravel untuk MongoDB

library Laravel jenssegers/mongodb bisa dilihat https://github.com/jenssegers/laravel-mongodb untuk menambahkan ke project Laravel kita dengan menjalankan perintah composer seperti di bawah ini :

  1. Menginstall Laravel pertama kali, di sini menggunakan Laravel versi 8
composer create-project laravel/laravel:8 bealajar-mongodb-laravel
  1. Menambahkan Library MongoDB untuk Laravel, dengan versi sesuai versi Laravel 8 maka library menggunakan 3.8
composer require jenssegers/mongodb:3.8
  1. Menambahkan config MongoDB di file database.php di path bealajar-mongodb-laravel\config\database.php seperti berikut:
  'mongodb' => [
      'driver' => 'mongodb',
      'host' => env('DB_HOST', '127.0.0.1'),
      'port' => env('DB_PORT', 27017),
      'database' => env('DB_DATABASE', 'homestead'),
      'username' => env('DB_USERNAME', 'homestead'),
      'password' => env('DB_PASSWORD', 'secret'),
      'options' => [
          // here you can pass more settings to the Mongo Driver Manager
          // see https://www.php.net/manual/en/mongodb-driver-manager.construct.php under "Uri Options" for a list of complete parameters that you can use

          'database' => env('DB_DATABASE', 'admin'), // required with Mongo 3+
      ],
  ]
  1. Mengubah isi file .env disesuaikan dengan koneksi MongoDB kalian dan merubah value key DB_CONNECTION menjadi DB_CONNECTION=mongodb MongoDB,
DB_CONNECTION=mongodb
DB_HOST=127.0.0.1
DB_PORT=27017
DB_DATABASE=laravel
DB_USERNAME=
DB_PASSWORD=

kosongkan DB_USERNAME DB_PASSWORD jika settingan mongodb tidak perlu autentikasi user, kondisi ini karena saya menggunakan mongodb di local pc saya dengan settingan tanpa username dan password jika teman - teman dengan settingan autentikasi sepeti contonya membuat konelsi ke mongodb.com maka isikan usename dan passwordnya konfigurasi mongodb teman teman.

  1. lalu jangan lupa tambahkan library jenssegers/mongodb di file app.php di path bealajar-mongodb-laravel\config\app.php seperti di bawah ini :
<?php

return [
    ....

    'providers' => [
        ....

        /*
         * Package Service Providers...
         */
        Jenssegers\Mongodb\MongodbServiceProvider::class,

        ....
    ],

    ....
];

Penjelasan

  • Jenssegers\Mongodb\MongodbServiceProvider::class, : memanggil library di autoload Laravel, di bagian 'providers'
  1. jika sudah maka kita optimasi library dengan cara jalankan perintah php artisan optimize di folder project

persiapan untuk membuat database MongoDB di Laravel

membuat database baru dengan nama laravel dan Collection name baru user

membuat database mongodb baru

Membuat CRUD di Laravel dengan MongoDB

setelah membuat database sebelumnya mari kita lanjutkan untuk mencoba simple CRUD untuk collection user

  1. membuat controller dengan tag resource, tujuannya ketika membuat controller dari artisan akan membuat beberapa method yang tergenerate
php artisan make:controller UserController --resource
  1. menyiapkan Model Laravel untuk terhubung dengan database MongoDb dengan collection user di database laravel yang kita buat sebelumnya. ubah file Model User di folder Model dengan menambahkan protected $collection = 'user'; dan protected $primaryKey = '_id'; seperti script contoh di bawah ini:
// bealajar-mongodb-laravel\app\Models\User.php

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Eloquent implements Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    protected $collection = 'user';
    protected $primaryKey = '_id';

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array<int, string>
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast.
     *
     * @var array<string, string>
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

Penjelasan

  • protected $collection = 'user'; : mendefinisikan collection yang akan dipilih dan digunakan oleh model
  • protected $primaryKey = '_id'; : mendefinisikan primary key yang digunakan oleh model yang nantinya membantu query builder untuk mengelola data
  • use Jenssegers\Mongodb\Eloquent\Model as Eloquent; : tambahkan line ini untuk memanggil library mongodb untuk model user dan
  • buat class menjadi class User extends Eloquent implements Authenticatable
  1. membuat controller CRUD api

Melakukan Create

    public function create()
    {
        $user           = new User();
        $user->name     = $request->input('name');
        $user->email    = $request->input('email');
        $user->save();

        return $user;
    }

Melakukan Read

ubah controller menjadi seperti berikut :


namespace App\Http\Controllers;
....
use App\Models\User;

class UserController extends Controller
{
    ....

    public function index()
    {
        $users = User::get()->toArray();
        return $data;
    }
    ....

Melakukan Update

    public function update(Request $request, $id)
    {
        $user           = User::find($id);
        $user->name     = $request->input('name');
        $user->email    = $request->input('email');
        $user->save();

        return $user;
    }

Melakukan Delete

    public function destroy($id)
    {
        $user = User::find($id);
        $user->delete();

        return $user;
    }
  1. menambahkan route di api file api.php
....

use App\Http\Controllers\UserController;
....

Route::get('users', [UserController::class, 'index', 'test-user']);
Route::post('users/create', [UserController::class, 'create', 'test-user']);
Route::get('users/{id}', [UserController::class, 'show', 'test-user']);
Route::get('users/delete/{id}', [UserController::class, 'destroy', 'test-user']);
Route::post('users/update', [UserController::class, 'update', 'test-user']);
....
  1. lalu jalankan laravel local server dengan perintah php artisan serve dan akses di http://localhost:8000/api/users