Laravel:尝试捕获中的DB :: Transaction()不起作用

时间:2020-01-02 09:50:57

标签: mysql laravel transactions

我在控制器中使用手动数据库事务。

public function exportUsers(){

  DB::beginTransaction();
  try{
    $data = new \App\Models\User();
    $excelData = $data->getMemberData();
    $reportGeneratedOn = date('dMY');
    $report_file_name = 'All_Members_'.$reportGeneratedOn.'.xls';
    DB::table('settings')->where('id',1)->update(['user_export_status_id'=>2]);
    $excelHTML = view('administrator.member.excel',compact('excelData'))->render();

    $reader = new \PhpOffice\PhpSpreadsheet\Reader\Html();
    $spreadsheet = $reader->loadFromString($excelHTML);
    $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');
    $fileName = md5('allmembers_'. microtime()).".xls";
    $path = storage_path('app/temp/');
    $writer->save( $path . $fileName );
    $excel_file_content = file_get_contents( $path . $fileName );
    $data = $this->S3Upload($fileName , env('S3_MEMBERS_EXPORT_PATH'), env('S3_MEMBERS_EXPORT_URL'), $excel_file_content,$report_file_name );
   if ( $data['status'] ){
    DB::table('settings')->where('id',1)->update(['user_export_status_id'=>3]);
    DB::table('settings')->where('id',1)->update(['user_export_path'=>$data['preSignedUrl']]);
   if( is_file($path . $fileName) ) {
   @unlink( $path . $fileName );
   }
}

  DB::commit();
  return response()->json(['error' => 0, 'code' => 200, 'message' => 'Please download the generated excel.','status'=>3, 'report_url' => $data['preSignedUrl']], 200);
}
  catch(\Exception $e){

   DB::rollBack();
  return response()->json(['error' => 1, 'code' => 200, 'message' => 'An error occured while generating the report.'.$e->getMessage().' : '.$e->getFile().'-'.$e->getLine()], 200);
 }
}

但是使用此方法我得到了如下错误

错误:生成报告时发生错误。DOMDocument:: loadHTML():htmlParseEntityRef:实体中没有名称,第2855行: C:\ wamp64 \ www \ O2X \ Trunk \ Web \ vendor \ phpoffice \ phpspreadsheet \ src \ PhpSpreadsheet \ Reader \ Html.php-619

我的数据库有一个user_export_status_id字段,该字段起初值为1。导出开始时,它被更新为2。但是在出现错误后,它没有回滚到1。Dataabse仍然具有值2。

0 个答案:

没有答案
相关问题