【发布时间】:2023-01-28 10:13:49
【问题描述】:
我有 PHP 8.3 和 Laravel 9 项目。
我有一个用于更新余额列值的发布路由。并在下面的控制器中运行
public function loadFunds(FundToCardRequest $request)
{
$user = auth()->user();
$request['clientUsername'] = 'username';
$request['username'] = $user->username;
$sum = $request['amount'];
$request['amount'] *= (1 - config('commissions.credit_card_from_wallet') / 100);
$response = SomeService::post('updateBalace', $request->toArray())->collect();
if ($response->get('code') == 200) {
DB::transaction(function () use ($user, $request, $sum) {
$balance = $user->wallets()->where('currency', 'USD')->first()->pivot->balance;
$user->wallets()->updateExistingPivot(1, ['balance' => $balance - $sum]);
$user->transactions()->create([
该函数接收具有以下规则的自定义请求。
public function rules()
{
$balance_usd = auth()->user()->wallets()->where('currency', 'USD')->first()->pivot->balance;
return [
'amount' => ['numeric', 'required', new NotZeroAmount(), new SendMoneyBalance($balance_usd)],
'cardId' => ['required'],
'ArrayHashId' => ['required'],
];
}
有一个规则汇款余额检查当前余额是否足以发送数量的钱。
问题如下。有时客户端可以同时发送两个请求。第一个请求需要时间处理,之后余额应该减少,余额中的最终金额应该是不够的。但是第二个请求通过了规则,因为第一个余额无法更新。在这两个请求余额变为负值之后。
有什么技术可以防止这种同时请求吗?或者像其他语言中的 await 结构。
【问题讨论】:
标签: php laravel laravel-8 laravel-9 php-8