开源软件名称(OpenSource Name):chelout/laravel-relationship-events开源软件地址(OpenSource Url):https://github.com/chelout/laravel-relationship-events开源编程语言(OpenSource Language):PHP 100.0%开源软件介绍(OpenSource Introduction):Laravel Relationship EventsMissing relationship events for Laravel Install
Stable branch:
Development branch:
Available traits:
use Chelout\RelationshipEvents\Concerns\HasOneEvents;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use HasOneEvents;
public static function boot()
{
parent::boot();
/**
* One To One Relationship Events
*/
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();
/**
* Many To Many Polymorphic Relations Events.
*/
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');
}
}
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
ObserversStarting from v0.4 it is possible to use relationship events in Laravel observers classes Usage is very simple. Let's take namespace App\Observer;
class UserObserver
{
/**
* Handle the User "hasOneCreating" event.
*
* @param \App\Models\User $user
* @param \Illuminate\Database\Eloquent\Model $related
*
* @return void
*/
public function hasOneCreating(User $user, Model $related)
{
Log::info("Creating profile for user {$related->name}.");
}
/**
* Handle the User "hasOneCreated" event.
*
* @param \App\Models\User $user
* @param \Illuminate\Database\Eloquent\Model $related
*
* @return void
*/
public function hasOneCreated(User $user, Model $related)
{
Log::info("Profile for user {$related->name} has been created.");
}
} Don't forget to register an observer in the namespace App\Providers;
use App\Models\User;
use App\Observers\UserObserver;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
// ...
public function boot()
{
User::observe(UserObserver::class);
}
// ...
} And now just create profile for user: // ...
$user = factory(User::class)->create([
'name' => 'John Smith',
]);
// Create profile and assosiate it with user
// This will fire two events hasOneCreating, hasOneCreated
$user->profile()->create([
'phone' => '8-800-123-45-67',
'email' => 'user@example.com',
'address' => 'One Infinite Loop Cupertino, CA 95014',
]);
// ... Todo
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论