【发布时间】:2019-02-01 18:05:03
【问题描述】:
这是我的场景: 我正在使用 Laravel 5.5.x。 我有两个模型,以一对多的方式链接。
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 工作正常,所以当我更新艺术品类别时,相关的艺术品 updated_at 字段也会更新。
但我需要听每件艺术品上的“触摸”事件。 我尝试在 AppServiceProvider 的引导方法上插入“更新”侦听器,但它没有被触发。
Artwork::updated(function ($model){
\Log::debug("HERE I AM");
});
我尝试过使用观察者,但没有成功。
class ArtworkObserver
{
public function updated(Artwork $artwork)
{
dd($artwork);
}
}
AppServiceProvider 中的引导方法:
Artwork::observe(ArtworkObserver::class)
问题: 有人可以告诉我正确的方法吗?或者告诉我我哪里错了? 我还不够好,无法找到一个可以帮助我做到这一点的示例。
更新 我需要实现这一点,因为我必须“解雇”Scout 才能将 Elasticsearch 上的更新数据保存在 Artwork 索引上。
【问题讨论】:
-
您想通过聆听
Artwork触摸来达到什么目的?$touches不会为Artwork模型触发这些事件,因为模型永远不会被创建而是大规模更新。
标签: php laravel events laravel-5