Laravel 5.7监听器,具有Eloquent更新功能

问题描述 投票:0回答:1

我有一个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

laravel laravel-5.7
1个回答
1
投票

你创造了一个无限循环。当您保存模型时,它会触发运行ImageSaved事件的UpdateSearchValues

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

© www.soinside.com 2019 - 2024. All rights reserved.