【发布时间】:2017-12-19 15:24:25
【问题描述】:
try {
\DB::beginTransaction();
Model::updateOrCreate( ['id' => $id, 'number' => $number],
['value' => $request->get('value')]
);
\DB::commit();
} catch (\Exception $e) {
\DB::rollBack();
throw new \Exception($e->error());
}
我正在执行一项任务来创建一个通用特征,以防止多个用户同时更新记录。而且,我的方法是将 $data->updated_at 的隐藏输入放入刀片中,然后在发送更新请求时对其进行检查。并且在某些情况下,Laravel 的 updateOrCreate 用于更新或创建新记录。而且,我不知道该如何处理。我应该拆分创建和更新的方法还是有什么好的方法来处理它?
【问题讨论】:
-
哪一部分给您带来了麻烦?
-
问题是我无法使用 updateOrCreate 检查现有记录的更新日期,因为如果数据库中没有匹配项,它只会创建一条新记录。项目中有多个 updateOrCreate 方法,所以我想知道是否可以保留该方法并防止多个用户同时更新现有数据。抱歉,我猜我的问题不太清楚
-
您应该将更新并创建为两个单独的端点然后在进行更新时检查它是否存在,如果存在,请更新它。
-
@Jasurbek 谢谢,现在更清楚了:)。你自己回答了一部分。如果您出于提到的原因想要包含该字段,则不能像这样使用
updateOrCreate。顺便说一句updateOrCreate基本上是这样的:firstOrNew($attributes)->fill($values)->save() -
@DevinGray 似乎这是我想要在那里实现的唯一途径。