2016-09-29 2 views
0

에 대한 쿼리 결과가 없습니다. 어떻게 처리해야하며 어떤 방법이 최선인지 제안하고 싶습니다. 암시 적 바인딩 또는 일반 바인딩 메서드입니다.Laravel Implict Binding있어 모델

Laravel 경로 암시 적 바인딩을 사용하고 있습니다. 잘못된 ID를 게시하면 오류가 발생했습니다 컨트롤러에 대한 쿼리 결과가 없습니다 예외 처리기. 이제는 예외 처리기로 처리했지만이 문제를 처리하거나 암시 적 바인딩을 피하기 위해 더 나은 솔루션이 필요합니다.

//Web.php이

Route::delete('/master/user/department/{department}/delete', ['as' => 'master.user.department.destroy', 'middleware' => 'permission:master.user.department.destroy', 'uses' => 'Master\User\[email protected]']); 

//DepartmentContrller.php

public function destroy(Department $department) 
{ 
     try { 
      $department->delete(); 
      return redirect(route('master.user.department.index'))->with('success', array(' Department Deleted successfully')); 
     } catch (Exception $e) { 
      return back()->with('criticalError', array($e->getMessage())); 
     } 
} 

//Handler.php

if ($exception instanceof \Illuminate\Database\Eloquent\ModelNotFoundException) 
{ 
    return redirect()->back()->with('custom_modal', ['Model Not Found Exception', $exception->getMessage()]); 
} 

아래의 코드가 작동 완벽하게되어, 내가 좋아하는 것 어떤 방법이 가장 적합한 지 아는 것. //DepartmentContrller.php

public function destroy($id) 
{ 
     try { 
      $department=Department::find($id); 
      if($department){ 
       $department->delete(); 
       return redirect(route('master.user.department.index'))->with('success', array(' Department Deleted successfully')); 
      } 
      else{ 
       return back()->with('criticalError', array('Department is not found.')); 
      } 
     } catch (Exception $e) { 
      return back()->with('criticalError', array($e->getMessage())); 
     } 
} 
+0

Laravel find()는 레코드를 찾을 수 없을 때 NULL을 반환합니다. is_null()을 사용하여 find 메소드의 응답을 확인할 수 있습니다. –

답변

1

두 가지 방법 모두 유효합니다. 자신의 상황에 적합한 방법을 선택하는 것은 귀하에게 달려 있습니다.

암시 적 모델 바인딩을 사용하면 코드를 빨리 열 수 있지만 일부 제어는 포기합니다.

명시 적 (일반) 바인딩은 더 많은 코드를 작성하지만 예외를 잡아서 처리하는 방법을 완벽하게 제어 할 수 있습니다.

참고로 암시 적 바인딩을 사용하는 경우에만 ModelNotFoundExceptiongetModel() 메서드를 사용하여 예외를 발생시킨 모델의 이름을 제공합니다. 이렇게하면 예외 처리를 좀 더 사용자 정의 할 수 있지만 예외가 발생한 곳을 처리하는 것과 동일한 제어를 제공하지는 못합니다.

-2

위의 방법은 모두 당신을 위해 일 수 있지만, 당신은 당신의 각각의 모델에 당신의 경우 --find() elqoent 메소드를 오버라이드 (override) 할 수

// Put this in any model and use 
// Modelname::find($id); 
public static function findOrCreate($id) 
{ 
    $obj = static::find($id); 
    return $obj ?: new static; 
} 

in depth description

+0

레코드를 찾을 수 없을 때 새로운 레코드를 만들 때, 레코드를 찾을 수없는 경우 어떻게 예외를 관리 할 수 ​​있습니까? –

+1

Eloquent 질의 생성자의'findOrNew()'메소드는 이미 이것을 수행한다. – Doom5