首页 > 解决方案 > 如何以原子方式加载新的并更新现有的 Eloquent 模型?

问题描述

在我的代码中,我有一个现有的 Eloquent 模型。我想原子地:

我写了以下代码:

private function getRefreshedAndUpdated(MyEloquentModel $old_model)
{
    $id = $old_model->id;
    $new_model = null;
    DB::transaction(function () use ($id, &$new_model) {
        $new_model = MyEloquentModel::lockForUpdate()->find($id);
        if ($new_model->state !== 'READY') {
            throw new \Exception('Model not ready');
        }
        $new_model->state = 'UPDATED';
        $new_model->save();
    });
    return $new_model;
}

这能实现我想要的吗?

特别是,我是否保证MyEloquentModel::lockForUpdate()->find($id)

我怀疑它会,但这是一些关键代码,所以要仔细检查。

标签: phplaraveleloquentconcurrencytransactions

解决方案


推荐阅读