用于保持两个相关模型同步的Laravel观察者模式

时间:2017-07-31 04:56:43

标签: laravel laravel-5

我正在使用Laravel 5.4。我有两个相关的雄辩模型:

ImageFile和ClipartImage。

ClipartImage包含belongsTo关系,如下所示:

class ClipartImage extends Model
{
    public function image_file()
    {
        return $this->belongsTo(ImageFile::class, 'image_file_id');
    }

    public function promote()
    {
        $this->image_file->promote();
    }
}

在ClipartImage上有一个“提升”方法,它将促销调用传递给ImageFile对象,因为它知道如何提升自己。

我遇到的问题是,如果由于方法调用而在ImageFile上更改属性,则相关的ClipartImage上会有一些属性可能需要更新。在ImageFile类中,我可以在数据库中搜索任何相关的ClipartImages并更新相关字段,但这不会更新我正在使用的现有ClipartImage实例。在模型之间解决这种依赖关系并保持内存中的对象实例同步的正常方法是什么?

我想我需要某种Observer模式,但在Laravel中,这些东西似乎是在静态/类级别处理而不是针对单个对象实例 - 即我可以创建一个观察者类来查找任何更改ImageFile模型,但这不会帮助我刷新或更新我现有的ClipartImage对象。

编辑:我使用了一个“推广”方法来说明,但是在ClipartImage和ImageFile类之间有很多交互,从剪贴画的角度来看它并不明显。可能需要刷新或更新自己。理想情况下,ImageFile会在关键字段发生变化时通知它,以便它可以做出相应的响应。

0 个答案:

没有答案