Laravel: Сделайте одно обновление запроса, а затем, если это удастся, сделайте следующее, в противном случае, не делайте ни - PullRequest
0 голосов
/ 10 сентября 2018

Итак, я хочу обновить две разные учетные записи пользователей с одинаковым значением.

Сценарий: Пользователь 1 переводит деньги Пользователю 2:

$transfer_from = $account->decrement('balance', $amount);

$transfer_to = Account::where('user_wallet_address', $receiver_wallet_address)->increment('balance', $amount);

Но, что я хочу, это что-то вроде этого:

$account->decrement('balance', $amount)->$transfer_to;

Как в if the decrement succeeds, then update the other user's balance, otherwise, both should fail

Мысли

1 Ответ

0 голосов
/ 10 сентября 2018

Пожалуйста, используйте функцию транзакции базы данных

См. Пример кода ниже:

public function readRecord() {
    DB::beginTransaction();
    try {
        // put your code here in try block

         $transfer_from = $account->decrement('balance', $amount);
         $transfer_to = Account::where('user_wallet_address', $receiver_wallet_address)->increment('balance', $amount); 
        DB::commit();
    } catch (Exception $ex) {
        // If any failure case generate, it will rollback the DB operations automatically.
        DB::rollBack();
        echo $ex->getMessage() . $ex->getLine();
    }

Надеюсь, это поможет вам. В этом случае, если генерируется какой-либо сбой, он автоматически вернет перемещение БД, и вам не нужно ничего делать.

Ссылочный URL: https://laravel.com/docs/5.7/database

...