Laravel 观察器 (observer) 在 updated 事件触发的时候更新自己的某个字段会不会造成无限循环?

在使用laravel Model 观察器时,Model自身一个字段需要在更新时自动维护。
使用以下方式

    /**
     * Handle the stock order item "updated" event.
     *
     * @param \App\Models\StockOrderItem $stockOrderItem
     * @return void
     */
    public function updated(StockOrderItem $stockOrderItem)
    {
        $stockOrderItem->balance = 998.88;
        $stockOrderItem->save();
    }

这样会不会导致一直执行这个更新?

在页面中测试了一下这种写法。会卡很久....

是不是观察器对应的状态下,不能对当前Model使用同样的操作状态?比如updated的时候不能再这个事件中对自身的Model更新

看了下日志.....确实进入了无限循环了...cpu也瞬间高起来了。

Laravel 观察器 (observer) 在 updated 事件触发的时候更新自己的某个字段会不会造成无限循环?

面向Google编程

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

放到 updating 中,,,然后不要手动 save

9个月前 评论
讨论数量: 9
drinke9
/**
 * Handle the stock order item "updated" event.
 *
 * @param \App\Models\StockOrderItem $stockOrderItem
 * @return void
 */
public function updated(StockOrderItem $stockOrderItem)
{
    //采购单状态更新之后自动维护balance字段
    if ($stockOrderItem->isDirty('status')) {
        $stockOrderItem->balance = 666.88;
        $stockOrderItem->save();
    }
}

这种写法也不行....估计只能通过控制器中对应更新操作Modal的时候手动更新了

9个月前 评论
Shuyi

查一下呗,


if ($stockOrderItem->balance != 666.88) {
     $stockOrderItem->balance = 666.88;
     $stockOrderItem->save();
}
9个月前 评论
阿神

观察器里面用DB操作试试

9个月前 评论
ALMAS

为何不在第一次更新时一并更新,非要要在observer中更新?

9个月前 评论

会的,前往别在ob里面更新,会死循环的

9个月前 评论

在观察器中不要使用 $model->save()

9个月前 评论
drinke9

@showcj 只要不使用自己的model save,就不会出现死循环的

9个月前 评论
showcj 9个月前

放到 updating 中,,,然后不要手动 save

9个月前 评论

会死循环的

9个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!