【发布时间】:2021-10-10 23:59:13
【问题描述】:
这是我第一次使用DB::transaction(),但如果交易失败或成功,它究竟是如何工作的?在下面的示例中,我是否必须手动分配一个值以返回 true,或者如果它失败,该方法将返回 false 或完全退出事务(因此跳过其余代码)?文档对此没有太大帮助。
use Exception;
use DB;
try {
$success = DB::transaction(function() {
// Run some queries
});
print_r($success);
} catch(Exception $e) {
echo 'Uh oh.';
}
解决方案
我为可能想知道的其他人写下了这个解决方案。
由于我更关心根据查询的成功返回布尔值,因此经过一些修改,它现在根据其成功返回 true/false:
use Exception;
use DB;
try {
$exception = DB::transaction(function() {
// Run queries here
});
return is_null($exception) ? true : $exception;
} catch(Exception $e) {
return false;
}
请注意,变量 $exception 永远不会返回,因为如果您的查询出现问题,catch 会立即触发返回 false。感谢@ilaijin 表明如果出现问题会抛出一个Exception 对象。
【问题讨论】:
-
谢谢。您的解决方案运行良好。