我在控制器中使用手动数据库事务。
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。