Cara menggunakan laravel mongodb crud

Cara menggunakan laravel mongodb crud

tampilan MongoDB di localhost menggunakan Robo3T

Kali ini, kita akan coba implementasi Laravel Queue dengan simple project yang akan mengirimkan email secara teratur menggunakan sistem antrian/queue worker, project ini akan connect ke database MongoDB atau MySQL.

Berikut hasil akhir dari tutorial ini berupa code github yang bisa langsung dicoba2 😄 😙

  • Laravel Queue connect ke MongoDB: https://github.com/djiwandou/laravel-emailqueue/tree/mongodb-test (branch: mongodb-test)
  • Laravel Queue connect ke MySQL: https://github.com/djiwandou/laravel-emailqueue (branch: master)

oiya, catatan ini dibuat dari hasil percobaan dan pengalaman pribadi penulis, berikut environment yang saya gunakan, bisa dilihat di file composer.json

"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"jenssegers/mongodb": "^3.6",
"laravel/framework": "5.8.*",
"laravel/tinker": "^1.0"

Setup MongoDB di localhost

Sebelum setup Laravel Queue, kita butuh MongoDB yang aman untuk ̶d̶i̶r̶u̶s̶a̶k̶ testing. Lokasi ter-aman ya di localhost, berikut cara setup nya.

Install Homebrew (abaikan jika sdh punya)

Karena saya menggunakan mac os-x, lebih enak install Homebrew dulu, cukup copast dan jalankan script berikut di terminal

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Tap dan install official MongoDB homebrew

Selanjutnya, kita perlu untuk memastikan versi mongodb yang akan diinstall.

$ brew tap mongodb/brew

cus lanjut install. 😄

$ brew install

hasil success-nya kayak gini ya

==> Summary
🍺 /usr/local/Cellar/mongodb-community/4.2.0: 21 files, 272.3MB, built in 6 seconds

Start service dan mulai Connect MongoDB

$ brew services start

Setelah service mongodb di-start, selanjutnya bisa menggunakan terminal dan ketik mongo atau menggunakan mongoDB client seperti Robo 3T

Hasil di terminal setelah berhasil connect, kemudian run command berikut untuk membuat collection baru bernama canvas

db.inventory.insertOne(
{ item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
)

Cara menggunakan laravel mongodb crud

tampilan di terminal setelah run command `mongo`

Selamat, sampai sini kalian sudah berhasil setup MongoDB di localhost! yay 👍 👍

Create & configure Laravel project

Buat project Laravel baru bernama laravel-emailqueue

$ composer create-project laravel/laravel=5.8.35 laravel-emailqueue — prefer-dist

$ cd laravel-emailqueue

Konfigurasi project Laravel, ubah file .env dengan melihat mailtrap Demo Inbox https://mailtrap.io untuk melakukan simulasi pengiriman email. (Buat akun dulu ya di mailtrap.io) 🙂

Create endpoint /email

Langkah selanjutnya, buat controller baru namanya EmailController.

$ php artisan make:controller EmailController

trus, tambahkan code berikut di routes/web.php

Route::get('email', 'EmailController@sendEmail');

lanjut buat mailable class yg bernama SendMailable (akan di-generate otomatis di app/Mail/SendMailable.php)

php artisan make:mail SendMailable

nanti isi filenya kaya gini ya

Sekarang, di file app/Http/Controller/EmailController.php add code berikut

public function sendEmail()
{
Mail::to('')->send(new SendMailable());
echo 'email terkirim';
}

Selanjutnya run php artisan serve dan buka http://localhost:8000/email dan inbox mailtrap (untuk cek email masuk).

Fiuh, bernafas dulu, 😅 disini kita sudah punya database MongoDB dan endpoint /email untuk test implementasi Laravel Queue. Masih kuat? kudu tetap s͟e͟m͟a͟n͟g͟a͟t yaa! Lanjut setup konfigurasi queue dan create job.

Setup & Konfigurasi Laravel Queue

Install driver MongoDB PHP dengan PECL (jika belum ada)

$ sudo pecl install mongodb dan copy extension=mongodb.so kedalam file php.ini (di macbook saya, file-nya terletak di /usr/local/etc/php/7.2/php.ini )

Install Laravel MongoDB by Jenssegers

Run command ini didalam project Laravel kita diatas ya

$ composer require jenssegers/mongodb

next, copy script ini didalam config/app.php

Jenssegers\Mongodb\MongodbServiceProvider::class,

Konfigurasi koneksi database ke MongoDB localhost

Didalam config/database.php add code berikut didalam array connections

'mongodb' => [
'driver' => 'mongodb',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', 27017),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
],

Konfigurasi Laravel Queue agar connect ke MongoDB

Didalam config/queue.php add code berikut didalam array connections

'mongodb' => [
'driver' => 'mongodb',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90,
],

Jangan lupa, untuk kedua konfigurasi diatas, file .env juga harus diubah, terutama di variabel2 yang berkaitan 😄

DB_CONNECTION=mongodb
DB_HOST=127.0.0.1
DB_PORT=27017
DB_DATABASE=test_mongo_queue
DB_USERNAME=
DB_PASSWORD=

Create SendEmailJob untuk mengirimkan email

php artisan make:job SendEmailJob

Nantinya, file ini akan ter-generate secara otomatis di app/Jobs/SendEmailJob.php . Disinilah kita mendefinisikan job apa yang akan dimasukkan ke dalam antrian / queue.

isi file SendEmailJob.php seperti ini. Kalau kalian jeli, sebenarnya isinya sama kayak yg di EmailController.php sebelumnya yaitu

Mail::to('')->send(new SendMailable());

Artinya, kita perlu pindah juga yang di EmailController.php dari yang sebelumnya begini

public function sendEmail()
{
Mail::to('')->send(new SendMailable());
echo 'email terkirim';
}

jadi gini (dispatch job untuk dimasukkan ke dalam Queue — table jobs di MongoDB)

public function sendEmail()
{
dispatch(new SendEmailJob());
echo 'email3 terkirim pakai job-queue';
}

Run & Test Laravel Queue MongoDB

Final step alias langkah terakhir, kita perlu test php artisan serve dan run http://localhost:8000/email

Hasil di browser (echo output saja)

Cara menggunakan laravel mongodb crud

echo output di browser

Hasil di MongoDB (jobs akan masuk kedalam table test_mongo_queue collection jobs)

Cara menggunakan laravel mongodb crud

ini sama kaya gambar diatas banget

Terakhir, run script ini di terminal lain untuk memproses jobs yang masih ada di antrian php artisan queue:work , hasilnya

[2019-09-10 07:01:19][5d774a3e0d274b35b0321ca2] Processing: App\Jobs\SendEmailJob
[2019-09-10 07:01:22][5d774a3e0d274b35b0321ca2] Processed: App\Jobs\SendEmailJob

Setelah itu buka mailtrap inbox maka akan tampil email baru di inbox (hasil eksekusi dari jobs) — jika sukses, maka jobs di MongoDB akan diclear

Cara menggunakan laravel mongodb crud

inbox mailtrap setelah mendapat email dari Laravel Queue