Looking to hire Laravel developers? Try LaraJobs

laravel-relationship-events maintained by sameedkun

Description
Missing relationship events for Laravel — actively maintained fork of chelout/laravel-relationship-events
Authors
Last update
2026/05/19 17:31 (dev-master)
License
Downloads
5

Comments
comments powered by Disqus

Laravel Relationship Events

Missing relationship events for Laravel — actively maintained fork of chelout/laravel-relationship-events

Note: The original package by @chelout has been inactive since 2020. This fork picks up where it left off, with Laravel 13 support and active maintenance.

Compatibility

Package Laravel PHP
v5.x 12.x, 13.x ^8.3
v4.x 11.x, 12.x ^8.2

Migrating from chelout/laravel-relationship-events

Already using the original package? Switching is seamless — no code changes required. The namespace, traits, and events are all identical.

Just swap the package name in your composer.json:

composer remove chelout/laravel-relationship-events
composer require sameedkun/laravel-relationship-events

Install

  1. Install package with composer
composer require sameedkun/laravel-relationship-events
  1. Use necessary trait in your model.

Available traits:

  • HasOneEvents
  • HasBelongsToEvents
  • HasManyEvents
  • HasBelongsToManyEvents
  • HasMorphOneEvents
  • HasMorphToEvents
  • HasMorphManyEvents
  • HasMorphToManyEvents
  • HasMorphedByManyEvents
use Chelout\RelationshipEvents\Concerns\HasOneEvents;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use HasOneEvents;

    public static function boot()
    {
        parent::boot();

        static::hasOneSaved(function ($parent, $related) {
            dump('hasOneSaved', $parent, $related);
        });

        static::hasOneUpdated(function ($parent, $related) {
            dump('hasOneUpdated', $parent, $related);
        });
    }
}
use Chelout\RelationshipEvents\Concerns\HasMorphToManyEvents;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasMorphToManyEvents;

    public static function boot()
    {
        parent::boot();

        static::morphToManyAttached(function ($relation, $parent, $ids, $attributes) {
            dump('morphToManyAttached', $relation, $parent, $ids, $attributes);
        });

        static::morphToManyDetached(function ($relation, $parent, $ids) {
            dump('morphToManyDetached', $relation, $parent, $ids);
        });
    }

    public function tags()
    {
        return $this->morphToMany(Tag::class, 'taggable');
    }
}
  1. Dispatchable relationship events.

It is possible to fire event classes via $dispatchesEvents property and adding HasDispatchableEvents trait:

use Chelout\RelationshipEvents\Concerns\HasOneEvents;
use Chelout\RelationshipEvents\Traits\HasDispatchableEvents;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use HasDispatchableEvents;
    use HasOneEvents;

    protected $dispatchesEvents = [
        'hasOneSaved' => HasOneSaved::class,
    ];
}

Relationships

Observers

Starting from v0.4 it is possible to use relationship events in Laravel observer classes. Add HasRelationshipObservables trait to your model and define an observer:

namespace App\Observer;

class UserObserver
{
    public function hasOneCreating(User $user, Model $related)
    {
        Log::info("Creating profile for user {$related->name}.");
    }

    public function hasOneCreated(User $user, Model $related)
    {
        Log::info("Profile for user {$related->name} has been created.");
    }
}

Register the observer in AppServiceProvider:

public function boot()
{
    User::observe(UserObserver::class);
}

Credits

License

MIT