2016-09-29 4 views
0

のクエリ結果がありません。どのように対処するか、どの方法が最適かをご提案します。 暗黙のバインドまたは通常バインドメソッド。Laravel Implict Binding haveモデル

私は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

どちらの方法も有効です。あなたの状況に適した方法を選択するのはあなた次第です。

暗黙のモデルバインドを使用すると、コードをドアからすばやく取得できるようになりますが、何らかの制御を放棄します。

明示的(通常)のバインディングでは、より多くのコードを記述することができますが、例外をキャッチして処理する方法を完全に制御することができます。

暗黙的なバインディングを使用している場合は、ModelNotFoundExceptionにはgetModel()メソッドがあり、例外の原因となったモデルの名前が表示されます。これにより、例外処理を少しカスタマイズすることができますが、例外が発生した場合の例外処理と同じ制御はできません。

-2

上記の方法のすべてのあなたのために働くことができますが、あなたのそれぞれのモデルでは、あなたの場合は--find()elqoentメソッドをオーバーライドすることができます

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