Search code examples
phplaraveleventseloquentobservers

Creating model event not firing in observer


I have the following files:

ModelObserverProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

use App\Models\User;
use App\Models\Profile;
use App\Observers\UserObserver;
use App\Observers\ProfileObserver;

class ModelObserverProvider extends ServiceProvider
{
    public function boot()
    {
        User::observe(UserObserver::class);
        Profile::observe(ProfileObserver::class);
    }

    public function register()
    {}
}

UserObserver.php

<?php

namespace App\Observers;

use App\Models\User;

class UserObserver
{
    public function creating(User $user)
    {
        dd('Creating...');
        // Hash the users password when creating.
        $user->password = bcrypt($user->password);

        // Create a new profile for the user.
        $user->profiles()->create(['name' => 'guest-' . time()]);
    }
}

I have loaded the ModelObserverProvider in my config/app.php, however, notice the dd('Creating...'); ? When creating a new user via User::create($request->all()) this does not appear to be firing at all? Any ideas?


Solution

  • Try this

    namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    use App\Models\User;
    use App\Models\Profile;
    use App\Observers\UserObserver;
    use App\Observers\ProfileObserver;
    
    class AppServiceProvider extends ServiceProvider
    {
      /**
        * Bootstrap any application services.
        *
        * @return void
        */
        public function boot()
        {
           User::observe(UserObserver::class);
           Profile::observe(ProfileObserver::class);
        }
    
        /**
          * Register any application services.
          *
          * @return void
          */
          public function register()
          {}
    }