具有雄辩更新的Laravel 5.7侦听器

时间:2019-02-13 16:03:12

标签: laravel laravel-5.7

我有一个 ImageSaved 事件:

    namespace App\Events;

    class ImageSaved
    {

        public $image;

        public function __construct(\App\Image $image)
        {
            $this->image = $image;
        }       
    }

UpdateSearchValues 侦听器:

class UpdateSearchValues
{

    public function handle(ImageSaved $event)
    {
        $event->image->search = 'Test 2';
        $event->image->save();
    }
}

如果我现在保存一个条目,例如

    $image = Image::find(1);
    $image->search = 'Test 1';
    $image->save();

我收到此异常错误:

  

达到最大功能嵌套级别'1000',正在中止!

代码看起来像是循环的,因为我的听众也在做更新。但是,它可以运行并且也可以保存。

如何更好地解决此问题(无例外)?

enter image description here

1 个答案:

答案 0 :(得分:1)

您已经创建了一个无限循环。保存模型时,它将触发运行ImageSaved事件的UpdateSearchValues

但是,在UpdateSearchValues中,您将再次更新模型,因此它将再次触发事件并运行侦听器。