我想删除其他关系,即使之前的删除失败。我使用了大量的try-catch来实现这个目标。有什么方法可以减少代码中的try-catch数量,或者不使用try-catch?
public function delete_live_event(Request $request){
try{
$user = User::find($request->auth_user_id);
if(!$request->journey_item_id){
return response()->json(['StatusMessage' => 'Bir hata oluştu !', 'StatusCode' => 401,'error'=>'live_event_id gönderilmedi'], 401);
}
$journey_item = JourneyItem::find($request->journey_item_id);
if ($journey_item == null) {
return response()->json(['StatusMessage' => __('contents.not_found'), 'StatusCode' => 404], 404);
}
/** Assigned Users deleted **/
try{
UserJourney::where('as_journey_id',$journey_item->journey->id)->delete();
}catch (\Exception $e){ //log
}
/** journey deleted **/
try{
$journey_item->journey()->delete();
}catch (\Exception $e){
//Log
}
/** content deleted **/
try{
$journey_item->content()->delete();
}catch (\Exception $e){//Log
}
/** notifications deleted **/
try{
UserJourneyItemNotification::where('as_journey_item_id', $journey_item->id)->delete();
}catch (\Exception $e){//Log
}
/** item deleted **/
try{
$journey_item->item()->delete();
}catch (\Exception $e){//Log
}
/** journey_item deleted **/
$journey_item->delete();
return response()->json(['StatusMessage' => 'Live event is deleted succesfuly', 'StatusCode' => 200], 200);
}catch (\Exception $e){
//TODO error log
return response()->json(['StatusMessage' => 'Bir hata oluştu !', 'StatusCode' => 400], 401);
}
}
Try Catch通常用在你想抓住一个错误以停止进一步处理的情况下。 如果你的列表中的每一个项目都可以被删除,即使其他项目不能被删除,那么根本没有理由使用trycatch。
你也不需要将你的主函数包裹在trycatch块中,因为在该代码中唯一会发生的失败是如果你调用了一个在你的对象中不存在的方法。这将是一个代码失败,需要修正。这不是你想让处理继续进行的错误类型,因为缺少的方法是一个代码错误,应该被纠正。