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