一个诡异的 Model::save 方法不存在的问题

前提是这样的,队列的某个consumer中的关于一个模型的save,有时候提是方法不存在

伪代码如下:

function handle()
{
    $id = $this->id;
    $model = Model::query()->find($id);
    if (!$model) throw new Exception('not found');
    Queue::push(new OtherJob($model->serial_id));
    $model['attr_1'] = 'processed';
    try {
        $model->save();
    } catch (Throwable $e) {
        $this->log(vsprintf("save_fail message:[%s], serialize:[%s], type:[%s]", [
            $e->getMessage(),
            serialize($order),
            gettype($order),
        ]), 'error');
    }
}

偶发性的能看到日志里有如下内容:

save_fail message:[Call to a member function save() on array], o:[a:1:{s:13:”last_queue_at”;O:25:”Illuminate\Support\Carbon”:3:{s:4:”date”;s:26:”2020-04-08 16:12:58.738117”;s:13:”timezone_type”;i:3;s:8:”timezone”;s:3:”PRC”;}}], type:[array]

但是看数据库中的attr_1确实也变成了processed

有碰到过类似问题的吗?

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 4

我们都是这样子调用 $model->attr_1 = 'processed'; $model->save();,还真没用过你的这种写法。

5年前 评论
cevin (楼主) 5年前
kiti 5年前
cevin (楼主) 5年前
kiti 5年前
cevin (楼主) 5年前

你这错误信息不够全,堆栈都没了,,,

5年前 评论
cevin (楼主) 5年前

mysql 有没有读写分离? 是不是读写分离的问题?

5年前 评论
cevin (楼主) 5年前
JerryBool (作者) 5年前

file

file
id=217 这个数据在我的库里没有 也就是说 你 find 出来的数据是空的 所以会有这个错误

建议你把数据的信息也放到日志里,你也说了这个错误是偶发的,这样方便你去查具体是哪条数据出的错

5年前 评论
cevin (楼主) 5年前
kiti (作者) 5年前
largezhou 5年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!