Nie, nie ma żadnych zdarzeń relacji w Wymownym. Ale można łatwo zrobić to sam (podane na przykład Ticket belongsToMany Component
relacji):
// Ticket model
use App\Events\Relations\Attached;
use App\Events\Relations\Detached;
use App\Events\Relations\Syncing;
// ...
public function syncComponents($ids, $detaching = true)
{
static::$dispatcher->fire(new Syncing($this, $ids, $detaching));
$result = $this->components()->sync($ids, $detaching);
if ($detached = $result['detached'])
{
static::$dispatcher->fire(new Detached($this, $detached));
}
if ($attached = $result['attached'])
{
static::$dispatcher->fire(new Attached($this, $attached));
}
}
obiekt zdarzenia tak proste, jak to:
<?php namespace App\Events\Relations;
use Illuminate\Database\Eloquent\Model;
class Attached {
protected $parent;
protected $related;
public function __construct(Model $parent, array $related)
{
$this->parent = $parent;
$this->related = $related;
}
public function getParent()
{
return $this->parent;
}
public function getRelated()
{
return $this->related;
}
}
następnie podstawowy słuchacz jako sensowny przykład:
// eg. AppServiceProvider::boot()
$this->app['events']->listen('App\Events\Relations\Detached', function ($event) {
echo PHP_EOL.'detached: '.join(',',$event->getRelated());
});
$this->app['events']->listen('App\Events\Relations\Attached', function ($event) {
echo PHP_EOL.'attached: '.join(',',$event->getRelated());
});
i użytkowania:
$ php artisan tinker
>>> $t = Ticket::find(1);
=> <App\Models\Ticket>
>>> $t->syncComponents([1,3]);
detached: 4
attached: 1,3
=> null
Oczywiście można to zrobić bez tworzenia obiektów Event, ale ten sposób jest wygodniejszy, elastyczny i po prostu lepszy.
O ile wiem, nie ma żadnego zdarzenia. Jednak możesz użyć programów obsługi zdarzeń, aby wystrzelić jeden – cleanunicorn
Dzięki! @hydrarulz tak, ale będę musiał zadbać o ręczne uruchamianie go za każdym razem, gdy użyję załącznika w tym konkretnym modelu, nie optymalnym –