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
Rekomendasi

Hosting Cepat untuk Website & Laravel

Butuh hosting yang ngebut dan stabil untuk deploy website atau aplikasi Laravel-mu? Ini rekomendasi yang saya pakai.

Lihat Rekomendasi Hosting
Yudhi
Ditulis oleh

Yudhi

Web Developer

Web developer yang sehari-hari berkutat dengan PHP, Laravel, JavaScript, dan MySQL. Terbiasa membangun aplikasi web dari nol — merancang database, menulis fitur, memburu bug, hingga deploy ke server — lalu menuangkan solusi dan tutorialnya di DhieCoderWeb agar lebih mudah diikuti developer lain.

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 →