2016-09-29 51 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

這兩種方法都是有效的。您應該選擇適合您的情況的方法。

隱式模型綁定會讓你更快地獲得代碼,但是你放棄了一些控制。

顯式(普通)綁定將需要更多的代碼來編寫,但您可以完全控制如何捕獲和處理異常。

只是一個FYI,如果你堅持隱式綁定,ModelNotFoundException有一個getModel()方法,它會給你導致異常的模型的名稱。這可以讓你自定義你的異常處理,但仍然不能像處理髮生的異常那樣給予你相同的控制。

-2

所有上述方法適合你的工作,但你可以在你的情況下,在各自的型號覆蓋elqoent方法--find()

// 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