Cara Menghubungkan Laravel dengan MongoDB dan membuat aplikasi CRUD
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
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
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 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
dan jika menggunakan PHP Laragon copy paste C:\laragon\bin\php\php-7.4.19-Win32-vc15-x64\ext
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
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
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 :
- Menginstall Laravel pertama kali, di sini menggunakan Laravel versi 8
composer create-project laravel/laravel:8 bealajar-mongodb-laravel
- Menambahkan Library MongoDB untuk Laravel, dengan versi sesuai versi Laravel 8 maka library menggunakan 3.8
composer require jenssegers/mongodb:3.8
- Menambahkan config MongoDB di file
database.php
di pathbealajar-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+
],
]
- Mengubah isi file
.env
disesuaikan dengan koneksi MongoDB kalian dan merubah value keyDB_CONNECTION
menjadiDB_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.
- lalu jangan lupa tambahkan library
jenssegers/mongodb
di fileapp.php
di pathbealajar-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'
- 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 CRUD di Laravel dengan MongoDB
setelah membuat database sebelumnya mari kita lanjutkan untuk mencoba simple CRUD untuk collection user
- membuat controller dengan tag resource, tujuannya ketika membuat controller dari artisan akan membuat beberapa method yang tergenerate
php artisan make:controller UserController --resource
- menyiapkan Model Laravel untuk terhubung dengan database MongoDb dengan collection
user
di databaselaravel
yang kita buat sebelumnya. ubah file ModelUser
di folder Model dengan menambahkanprotected $collection = 'user';
danprotected $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 modelprotected $primaryKey = '_id';
: mendefinisikan primary key yang digunakan oleh model yang nantinya membantu query builder untuk mengelola datause 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
- 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;
}
- 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']);
....
- lalu jalankan laravel local server dengan perintah
php artisan serve
dan akses di http://localhost:8000/api/users