Kembali ke Artikel
10 November 2025
Diperbarui: 8 September 2026

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 model dibuat, diupdate, dihapus, dll. Daripada pasang listener di banyak tempat, Observer mengumpulkan semua hook untuk satu model di satu kelas.

Event lifecycle yang bisa di-observe:

  • creating / created
  • updating / updated
  • saving / saved
  • deleting / deleted
  • restoring / restored (untuk soft deletes)
  • forceDeleting / forceDeleted

Membuat Observer

php artisan make:observer ArticleObserver --model=Article

File dibuat di app/Observers/ArticleObserver.php:

<?php

namespace AppObservers;

use AppModelsArticle;
use IlluminateSupportStr;

class ArticleObserver
{
    public function creating(Article $article): void
    {
        // Auto-generate slug sebelum disimpan
        if (empty($article->slug)) {
            $article->slug = Str::slug($article->title);
        }
    }

    public function created(Article $article): void
    {
        // Kirim notifikasi ke admin
        cache()->forget('articles.count');
    }

    public function updating(Article $article): void
    {
        // Update slug kalau title berubah
        if ($article->isDirty('title')) {
            $article->slug = Str::slug($article->title);
        }
    }

    public function deleting(Article $article): void
    {
        // Hapus gambar terkait sebelum artikel dihapus
        $article->images()->each(fn ($img) => $img->delete());
    }
}

Registrasi Observer

Di app/Providers/AppServiceProvider.php:

<?php

namespace AppProviders;

use AppModelsArticle;
use AppObserversArticleObserver;
use IlluminateSupportServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        Article::observe(ArticleObserver::class);
    }
}

Atau bisa dengan attribute di model (Laravel 12):

use AppObserversArticleObserver;
use IlluminateDatabaseEloquentAttributesObservedBy;

#[ObservedBy([ArticleObserver::class])]
class Article extends Model
{
    // ...
}

Observer vs Event Listener: Kapan Pakai Yang Mana?

Kondisi Pilihan
Hook spesifik ke satu Eloquent model Observer
Aksi yang dipicu dari banyak model berbeda Event Listener
Logika bisnis yang tidak terkait model Eloquent Event Listener
Semua hook untuk satu model ingin dikumpulkan di satu tempat Observer

Menonaktifkan Observer Sementara

Berguna saat import data massal, agar Observer tidak dipanggil ribuan kali:

// Import tanpa trigger Observer
Article::withoutObservers(function () {
    foreach ($rows as $row) {
        Article::create($row);
    }
});

// Atau nonaktifkan event model seluruhnya
Article::unsetEventDispatcher();

Setelah import selesai, event otomatis aktif kembali.

Baca Juga

Mau tim yang bantu setup arsitektur model-driven di aplikasi Laravel Anda? Lihat layanan pengembangan aplikasi kami.

Tag: #laravel #php #tutorial
BACA JUGA

Artikel Lainnya di Kategori Laravel

Laravel

10 November 2025

Contoh Penggunaan Concurrency di Laravel 12: Dashboard, API Paralel, dan Defer

Artikel sebelumnya membahas konsep Concurrency di Laravel 12. Artikel ini fokus pada implementasi: studi kasus nyata bagaimana Concurrency bisa mempercepat aplikasi secara signifikan. Studi Kasus 1: Dashboard dengan Banyak Data Source Dashboard admin yang butuh data dari beberapa tabel berbeda. Ini biasanya jadi bottleneck karena diquery satu per satu. Sebelum (sequential — sekitar 800ms): public […]

Baca Artikel
Laravel

9 November 2025

Tutorial Laravel 12 Job Batching: Implementasi, Progress, dan Error Handling

Bayangkan Anda perlu kirim email ke 5.000 pengguna sekaligus, atau proses 1.000 gambar setelah upload. Kalau dijalankan satu per satu lewat queue biasa, Anda tidak tahu kapan semuanya selesai, dan tidak bisa jalankan aksi “setelah semua beres”. Job Batching di Laravel menyelesaikan masalah ini. Artikel ini membahas cara kerjanya, implementasi lengkap dengan contoh kode, dan […]

Baca Artikel
Laravel

9 November 2025

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 […]

Baca Artikel

Ingin Membaca Artikel Lainnya?

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

Lihat Semua Artikel