Laravel:做一个查询更新然后,如果成功,则执行下一个,否则,不执行任何操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel:做一个查询更新然后,如果成功,则执行下一个,否则,不执行任何操作相关的知识,希望对你有一定的参考价值。

所以,我想更新两个具有相同值的不同用户帐户。

场景:用户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一样

思考?

答案

请使用数据库事务功能

见下面的代码示例:

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();
    }

我希望这能帮到您。在这种情况下,如果生成任何故障情况,它将自动恢复数据库转移,您无需执行任何操作。

参考网址:https://laravel.com/docs/5.7/database

以上是关于Laravel:做一个查询更新然后,如果成功,则执行下一个,否则,不执行任何操作的主要内容,如果未能解决你的问题,请参考以下文章

在原始 sql 查询 Laravel 中插入变量

postgresql函数-获取受更新查询影响的行数[重复]

如何合并集合和查询构建器,然后在其上使用分页 Laravel 8

laravel ajax 成功后如何刷新数据表?

在 laravel 中一次更新多个列的值

C++的fstream如何检查一个文件是不是成功打开?