【问题标题】:Returning data from within a Transaction in Laravel 4从 Laravel 4 的事务中返回数据
【发布时间】:2013-06-15 04:57:44
【问题描述】:

我有以下代码 sn-p,但我似乎无法让它工作。

$paymentGatewayTransaction = $this->processTransaction($data);
DB::connection('new_db')->transaction(function () use ($paymentGatewayTransaction) {
    //Performing all DB transactions here to insert Order Information.
    if ($paymentGatewayTransaction['Status'] == "APPROVED")
        return Response::json(array('Status' => 'Success'), '200'); else
        return Response::json(array('Status' => 'Error'), '200');
});

function processTransaction($data) {
    //Process Gateway Transaction
    if ($gatewayWasSuccessfull)
        return array('Status' => 'APPROVED'); else
        return array('Status' => 'DECLINED');
}

57 行上的返回 Response::json() 似乎根本没有任何效果。响应永远不会到达浏览器。

如果我将 if 条件从行 48 移到闭包函数之外,它可以正常工作。

作为一种解决方法,我最终不得不执行以下操作。

$paymentGatewayTransaction = $this->processTransaction($data);
$orderObj = "";
DB::connection('new_db')->transaction(function () use ($paymentGatewayTransaction, &$orderObj) {
    //Performing all DB transactions here to insert Order Information.
    // **$orderObj is set here**
});

if ($paymentGatewayTransaction['Status'] == "APPROVED")
    return Response::json(array('Status' => 'Success', 'Order' => $orderObj->id), '200'); else
    return Response::json(array('Status' => 'Error'), '200');

function processTransaction($data) {
    //Process Gateway Transaction
    if ($gatewayWasSuccessfull)
        return array('Status' => 'APPROVED'); else
        return array('Status' => 'DECLINED');
}

在闭包外部创建对象$orderObj,并通过引用事务将其作为变量在闭包函数外部使用。这可以更简单吗?或者这是使用它的方法吗?

【问题讨论】:

    标签: php closures laravel laravel-4


    【解决方案1】:

    你可以像这样在一个变量中分配事务闭包的返回值:

    $paymentGatewayTransaction = $this->processTransaction($data);
    $var = DB::connection('new_db')->transaction(function () use ($paymentGatewayTransaction) {
        //Performing all DB transactions here to insert Order Information.
        if ($paymentGatewayTransaction['Status'] == "APPROVED")
            return Response::json(array('Status' => 'Success'), '200'); else
            return Response::json(array('Status' => 'Error'), '200');
    });
    return $var;
    

    然后就可以使用 $var 来返回了。

    【讨论】:

    • 这很有趣,因为这意味着来自transaction() 的任何返回语句都保留在transaction() 中,就像函数语句一样。
    猜你喜欢
    • 2019-05-14
    • 2016-03-16
    • 1970-01-01
    • 2020-06-05
    • 2016-09-16
    • 2016-09-19
    • 2019-05-29
    • 1970-01-01
    • 2020-05-04
    相关资源
    最近更新 更多