Cara Membuat Notifikasi di Laravel (Database & Email)

Sistem notifikasi adalah fitur penting dalam hampir setiap aplikasi web modern โ€” mulai dari pemberitahuan pesanan masuk, verifikasi email, hingga peringatan aktivitas akun. Laravel...

Cara Membuat Notifikasi di Laravel (Database & Email)

Sistem notifikasi adalah fitur penting dalam hampir setiap aplikasi web modern โ€” mulai dari pemberitahuan pesanan masuk, verifikasi email, hingga peringatan aktivitas akun. Laravel memiliki sistem notifikasi bawaan yang sangat fleksibel, mendukung berbagai channel seperti email, database, SMS, dan Slack. Dalam tutorial ini, kita akan fokus pada dua channel paling umum: database dan email.

Persiapan: Tabel Notifikasi Database

Untuk notifikasi channel database, Laravel membutuhkan tabel khusus. Buat dengan perintah:

php artisan make:notifications-table
php artisan migrate

Ini akan membuat tabel notifications yang menyimpan notifikasi dalam format JSON.

Membuat Kelas Notifikasi

Buat kelas notifikasi menggunakan Artisan:

php artisan make:notification OrderPlaced

File akan dibuat di app/Notifications/OrderPlaced.php. Edit file tersebut:

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;

class OrderPlaced extends Notification implements ShouldQueue
{
    use Queueable;

    public function __construct(
        protected array $orderData
    ) {}

    // Tentukan channel yang digunakan
    public function via(object $notifiable): array
    {
        return ['database', 'mail'];
    }

    // Konten untuk email
    public function toMail(object $notifiable): MailMessage
    {
        return (new MailMessage)
            ->subject('Pesanan Kamu Berhasil Dibuat!')
            ->greeting('Halo, ' . $notifiable->name . '!')
            ->line('Pesanan kamu dengan nomor #' . $this->orderData['order_number'] . ' telah berhasil kami terima.')
            ->line('Total pembayaran: Rp ' . number_format($this->orderData['total'], 0, ',', '.'))
            ->action('Lihat Pesanan', url('/orders/' . $this->orderData['order_id']))
            ->line('Terima kasih telah berbelanja!');
    }

    // Konten untuk database
    public function toDatabase(object $notifiable): array
    {
        return [
            'order_id'     => $this->orderData['order_id'],
            'order_number' => $this->orderData['order_number'],
            'total'        => $this->orderData['total'],
            'message'      => 'Pesanan #' . $this->orderData['order_number'] . ' berhasil dibuat.',
        ];
    }
}

Mengirim Notifikasi

Ada dua cara mengirim notifikasi di Laravel. Pastikan model User sudah menggunakan trait Notifiable (sudah ada secara default):

// Cara 1: Melalui model (Notifiable trait)
$user = User::find(1);
$user->notify(new OrderPlaced([
    'order_id'     => 101,
    'order_number' => 'ORD-2024-001',
    'total'        => 250000,
]));

// Cara 2: Melalui Facade Notification (untuk banyak user sekaligus)
use Illuminate\Support\Facades\Notification;

$users = User::where('is_admin', true)->get();
Notification::send($users, new OrderPlaced([
    'order_id'     => 101,
    'order_number' => 'ORD-2024-001',
    'total'        => 250000,
]));

Mengambil dan Menampilkan Notifikasi Database

Notifikasi database disimpan di tabel dan bisa diakses melalui relasi model User:

// Di controller
$user = auth()->user();

// Semua notifikasi
$notifications = $user->notifications;

// Hanya yang belum dibaca
$unread = $user->unreadNotifications;

// Jumlah belum dibaca
$count = $user->unreadNotifications()->count();

Tampilkan di Blade:

@foreach(auth()->user()->unreadNotifications as $notification)
    <div class="notif {{ $notification->read_at ? '' : 'unread' }}">
        <p>{{ $notification->data['message'] }}</p>
        <small>{{ $notification->created_at->diffForHumans() }}</small>
    </div>
@endforeach

Menandai Notifikasi sebagai Sudah Dibaca

// Tandai satu notifikasi
$notification = auth()->user()->notifications()->find($id);
$notification->markAsRead();

// Tandai semua sebagai sudah dibaca
auth()->user()->unreadNotifications->markAsRead();

Konfigurasi Email

Atur konfigurasi email di file .env:

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="noreply@aplikasikamu.com"
MAIL_FROM_NAME="${APP_NAME}"

Untuk testing lokal, gunakan Mailtrap atau MAIL_MAILER=log yang akan menulis email ke file log Laravel.

Menggunakan Queue untuk Notifikasi

Karena kelas notifikasi kita mengimplementasikan ShouldQueue, notifikasi akan dikirim secara asinkron lewat queue. Ini sangat penting untuk performa aplikasi agar pengiriman email tidak memblokir request user. Jalankan queue worker:

php artisan queue:work

Untuk development, bisa gunakan QUEUE_CONNECTION=sync di .env agar notifikasi dikirim langsung tanpa queue.

Kesimpulan

Sistem notifikasi Laravel sangat powerful dan mudah digunakan. Dengan satu kelas notifikasi, kamu bisa mengirim pesan ke berbagai channel sekaligus. Langkah selanjutnya bisa mengeksplorasi notifikasi real-time menggunakan channel broadcast dengan Laravel Echo dan Pusher, sehingga notifikasi muncul instan di browser tanpa perlu refresh halaman.

notifikasi laravel laravel notification laravel email notification database notification laravel laravel notify sistem notifikasi web
Bagikan artikel
Kembali

Komentar (0)

Punya pertanyaan atau tambahan? Tulis di bawah โ€” tak perlu login.

Membalas komentarโ€ฆ batal

Belum ada komentar. Jadilah yang pertama!

๐Ÿš€ Partner Recommendation

Butuh Source Code & Aplikasi Premium?

Download aplikasi Laravel, POS, Sekolah, Klinik, ERP, dan source code siap pakai di GudangCode.

GudangCode
  • โœ” Source Code Premium
  • โœ” Sistem Siap Pakai
  • โœ” Lifetime Update
  • โœ” Membership Lifetime
  • โœ” Update Aplikasi Harian
Daftar Membership โ†’