记录一次数据保存出错
记录一次数据保存出错
1、问题描述
我在foreach中加入了事务,但是执行完之后,在数据库中没有相应的数据,但是看日志显示整个流程执行完成。
2、代码示例
$data=Order::where('is_deleted',0)->where('pay_status',0)->select('money')->get();
foreach($data as $k=>$v){
DB::beginTransaction();
try {
$user=User::find($v->user_id);
if($user->money<=0){
continue;
}
if($v->money<=$user->money){
$pay_money=$v->money;
$no_pay_money=0;
$pay_status=2;
$money=$user->money-$v->money;
}else{
$pay_money=$user->money;
$no_pay_money=$v->money-$user->money;
$pay_status=1;
$money=0;
}
$user->money=$money;
$order=Order::find($v->id);
$order->pay_status=$pay_status;
$order->pay_money=$pay_money;
$order->no_pay_money=$no_pay_money;
if(!$order->save()){
throw new \Exception('1');
}
$paylog=new PayLog();
$paylog->xxx=xxx;
if(!$paylog->save()){
throw new \Exception('1');
}
DB::commit();
}catch (Exception $e) {
Log::error('执行出错:'.$e);
DB::rollback();
}
}
3、查找问题
- 在commit前后加入日志,查看执行日志,发现有相关日志,则说明程序顺序执行完毕。
- 在表中手动插入一条数据,发现ID不连续,则说明数据已经生成成功。
- 生成数据但是没有保存则说明事务没有提交,将continue前加入commit,发现数据保存成功。
结语:
基础不扎实,代码质量不够,小问题都找许久。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: