Kembali ke Artikel
9 November 2025
vandyahmad24
Diperbarui: 18 April 2026

Notification di Laravel 12: Email, Database, dan Channel Kustom

Hampir semua aplikasi web butuh notifikasi: konfirmasi order, reset password, atau pemberitahuan saat ada komentar baru. Laravel punya sistem notifikasi yang cukup fleksibel: satu kelas bisa kirim ke email, database, Slack, dan channel lain sekaligus.

Artikel ini membahas cara kerja notification di Laravel 12, mulai dari membuat kelas notifikasi, kirim via email dan database, sampai membuat channel kustom.

Membuat Kelas Notifikasi

php artisan make:notification OrderConfirmed

File dibuat di app/Notifications/OrderConfirmed.php:

<?php

namespace AppNotifications;

use AppModelsOrder;
use IlluminateBusQueueable;
use IlluminateNotificationsNotification;
use IlluminateNotificationsMessagesMailMessage;
use IlluminateContractsQueueShouldQueue;

class OrderConfirmed extends Notification implements ShouldQueue
{
    use Queueable;

    public function __construct(
        private Order $order
    ) {}

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

    public function toMail(object $notifiable): MailMessage
    {
        return (new MailMessage)
            ->subject("Order #{$this->order->id} Dikonfirmasi")
            ->greeting("Halo, {$notifiable->name}!")
            ->line("Order Anda telah kami terima dan sedang diproses.")
            ->action('Lihat Detail Order', route('orders.show', $this->order))
            ->line("Terima kasih sudah berbelanja.");
    }

    public function toDatabase(object $notifiable): array
    {
        return [
            'order_id' => $this->order->id,
            'message'  => "Order #{$this->order->id} dikonfirmasi",
            'url'      => route('orders.show', $this->order),
        ];
    }
}

Notifiable Trait

Model yang ingin menerima notifikasi harus menggunakan trait Notifiable. Model User bawaan Laravel sudah menyertakan ini:

use IlluminateNotificationsNotifiable;

class User extends Authenticatable
{
    use Notifiable;
}

Untuk model lain — misalnya Admin atau Customer — tambahkan trait yang sama.

Mengirim Notifikasi

// Lewat instance model
$user->notify(new OrderConfirmed($order));

// Lewat Notification facade (tanpa model spesifik)
Notification::send($users, new OrderConfirmed($order));

// On-demand — kirim ke email tanpa model User
Notification::route('mail', 'admin@example.com')
            ->notify(new OrderConfirmed($order));

Karena kelas ini implement ShouldQueue, notifikasi akan diproses di background queue, tidak memperlambat response HTTP.

Notifikasi Email: Kustomisasi Template

Untuk kontrol penuh atas tampilan email, publish template bawaan Laravel:

php artisan vendor:publish --tag=laravel-mail

Template disimpan di resources/views/vendor/mail/. Edit sesuai kebutuhan brand Anda.

Kalau mau pakai Markdown template yang lebih kaya:

php artisan make:notification OrderShipped --markdown=mail.order.shipped

Template dibuat di resources/views/mail/order/shipped.blade.php:

@component('mail::message')
# Order Anda Dalam Perjalanan

Pesanan **#{{ $order->id }}** sedang dikirim ke alamat Anda.

@component('mail::button', ['url' => $trackingUrl])
Lacak Pengiriman
@endcomponent

Estimasi tiba: **{{ $order->estimated_arrival }}**

Salam,
{{ config('app.name') }}
@endcomponent

Notifikasi Database

Untuk simpan notifikasi di database (biasanya untuk fitur notifikasi in-app), buat tabel dulu:

php artisan make:notifications-table
php artisan migrate

Ambil notifikasi yang belum dibaca:

// Semua notifikasi
$notifications = auth()->user()->notifications;

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

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

// Tandai satu notifikasi sudah dibaca
$notification->markAsRead();

Channel Kustom

Kalau perlu kirim via WhatsApp, Telegram, atau sistem internal, buat channel kustom:

<?php

namespace AppNotificationsChannels;

use IlluminateNotificationsNotification;

class WhatsAppChannel
{
    public function send(object $notifiable, Notification $notification): void
    {
        $message = $notification->toWhatsApp($notifiable);

        // Kirim via WhatsApp API
        app(WhatsAppService::class)->send(
            $notifiable->phone,
            $message
        );
    }
}

Daftarkan di method via():

public function via(object $notifiable): array
{
    return [WhatsAppChannel::class, 'database'];
}

public function toWhatsApp(object $notifiable): string
{
    return "Order #{$this->order->id} Anda sudah dikonfirmasi.";
}

Baca Juga

Butuh tim yang bantu implementasi sistem notifikasi di aplikasi Laravel Anda? Lihat layanan pengembangan aplikasi kami.

Tag: #laravel #php #tutorial
BACA JUGA

Artikel Lainnya di Kategori Laravel

Laravel

9 November 2025

Tutorial PostgreSQL di Laravel: Setup, JSONB, dan Full-Text Search

Laravel secara default menggunakan MySQL. Tapi kalau proyek Anda butuh fitur seperti JSON columns yang lebih canggih, full-text search bawaan, atau JSONB, PostgreSQL adalah pilihan yang solid. Artikel ini membahas cara setup PostgreSQL di Laravel, termasuk konfigurasi, perbedaan dengan MySQL, dan fitur-fitur PostgreSQL yang bisa dimanfaatkan langsung dari Eloquent. Instalasi dan Konfigurasi Pastikan extension PHP […]

Baca Artikel
Laravel

10 November 2025

Apa Itu Observer di Laravel 12 dan Kapan Menggunakannya

Kalau Event dan Listener cocok untuk “sesuatu terjadi di aplikasi, beri tahu komponen lain”, Observer punya fokus berbeda: “ketika Eloquent model berubah, jalankan kode ini.” Artikel ini menjelaskan apa itu Observer di Laravel 12, perbedaannya dengan Event Listener, dan kapan sebaiknya dipakai. Apa Itu Observer? Observer adalah kelas yang merespons event lifecycle Eloquent model: saat […]

Baca Artikel
Laravel

9 November 2025

Cara Instalasi Laravel Volt di Laravel 12: Via Breeze dan Livewire Langsung

Laravel Volt sudah termasuk dalam Livewire v3, jadi cara installnya lebih mudah dari yang Anda bayangkan. Artikel ini membahas dua jalur instalasi: lewat Laravel Breeze, dan langsung lewat Livewire. Prasyarat PHP 8.1 atau lebih baru Laravel 10 ke atas (disarankan Laravel 12) Composer Jalur 1: Install via Laravel Breeze Ini jalur paling umum. Breeze menyediakan […]

Baca Artikel

Ingin Membaca Artikel Lainnya?

Temukan lebih banyak insight dan tips tentang teknologi dan bisnis digital.

Lihat Semua Artikel