Laravel 5如何处理模型的冲突

时间:2016-06-10 17:01:04

标签: laravel laravel-5 laravel-5.2

我没有看到Laravel如何处理保存模型上的冲突。

假设我的Product模型具有quantity属性。如果例如买方购买产品,我应该如何防止冲突:

$product = Product::find(1);
$product->quantity = $product->quantity - 1;
$product->save();

而卖家想要更新数量:

$product = Product::find(1);
$product->quantity = $product->quantity + 100;
$product->save();

那么如果他们在同一时间运行该代码会发生什么? Laravel如何正确保存数据?我需要手动处理冲突吗?

我没有在文档中看到任何关于此类内容的引用,因此任何信息都会有所帮助。

1 个答案:

答案 0 :(得分:0)

任何代码都不会在同一时间运行。但我确实明白为什么你可能会担心。两个用户同时改变了一些东西,等等等等。他们都处于编辑模式,一个保存会覆盖另一个,等等。

但是 ,您可以在Laravel中使用lockForUpdate()。例如,像这样:

$product = Product::lockForUpdate()->find(1);
$product->quantity = $product->quantity + 100;
$product->save();

此处有更多信息:https://laravel.com/docs/5.2/queries#pessimistic-locking