【问题标题】:Laravel DB::select is breaking a future transactionLaravel DB::select 正在破坏未来的事务
【发布时间】:2021-01-10 19:31:01
【问题描述】:

我有以下代码:

DB::select($sql, $params);

DB::beginTransaction();
try {
    DB::commit();
} catch (Exception $e) {
    DB::rollback();
    return [
        'code' => 500,
        'error' => true,
        'message' => 'There was a problem saving your transaction.'
    ];
} 

导致以下错误的原因:

message:    "There is no active transaction"
exception   "PDOException"

try 语句中应该有更多说明,但要表明它们都没有影响,它们已被删除。似乎 select 是出于某种原因打开交易而不是关闭它。 (select 正在运行一个返回两个结果集的 SP,但我只想要一个,因此使用 select。)没有 select 语句,一切都很好,并且 select 语句本身不会导致任何错误并返回我需要的.但是,如果我将 select 语句放在 try 语句中,则会导致异常。

谢谢。

【问题讨论】:

    标签: php sql laravel


    【解决方案1】:

    这样的东西有用吗?

    DB::beginTransaction();
    
    DB::select($sql, $params);
    
    try {
        // your code that could fail
    }
    catch (Exception $e)
    {
        DB::rollback();
    
        return [
            'code' => 500,
            'error' => true,
            'message' => 'There was a problem saving your transaction.'
        ];
    } 
    
    DB::commit();
    
    return [
        'code' => 200,
        'error' => false,
        'message' => 'Successful transaction.'
    ];
    

    【讨论】:

    • 这行得通,但是,选择和事务在两个不同的函数中(事务依赖于选择),因此选择不需要移动大量代码,需要在事务之前。如果我确实使用上述方法,然后打开另一个事务,我会收到相同的错误。
    猜你喜欢
    • 2014-03-09
    • 1970-01-01
    • 2014-02-25
    • 2014-04-04
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    相关资源
    最近更新 更多