vendredi 1 février 2019

Fire Laravel events on touch

this is my scenario: I'm using Laravel 5.5.x. I have two models, linked in one to many way.

class Artwork extends Model
{
   //It has timestamps
   protected $table = 'artworks';
   protected $fillable = [
        'artwork_category_id'
   ];
   public function artworkCategory()
    {
        return $this->belongsTo('App\Models\ArtworkCategory');
    }
}

class ArtworkCategory extends Model
{
    use SoftDeletes;

    protected $touches = ["artworks"];

    /**
     * @var string
     */
    protected $table = 'artwork_categories';
     protected $fillable = [
        'category_name',
        'acronym',
        'deleted_at'
    ];

    public function artworks()
    {
        return $this->hasMany('App\Models\Artwork');
    }
}

Touch works correctly, so when I update an artwork category the related artworks updated_at field is updated.

But I need to listen the "touch" event on each artwork. I've tried inserting "updated" listener on boot method in AppServiceProvider, but it is not fired.

Artwork::updated(function ($model){
            \Log::debug("HERE I AM");
        });

I've tried using an observer, but no luck.

class ArtworkObserver
{
    public function updated(Artwork $artwork)
    {
        dd($artwork);
    }
}

Boot method in AppServiceProvider:

Artwork::observe(ArtworkObserver::class)

Question: Could somebody show me the right way to do it? Or tell me where am I wrong? I was not good enough to find an example that helps me how to do it.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire