2017-10-29 8 views
2

Laravel 5では、リソースコントローラを使用している場合、モデルは自動的に読み込まれ、メソッドに入ります。
しかし、私のモデルがアクティブでないかどうかを調べるクエリスコープがあります。この1つの特定のケースでは、そのクエリスコープを削除したいですが、クラスの他のメソッドに残しておきます。Laravelリソースコントローラの自動ロードされたリソースからクエリスコープを削除します。

モデルでresolveRouteBindingを無効にすることができます。しかし、これは、1つの方法だけでなく、すべての方法でそれを上書きします。

ありがとうございました。

答えて

0

私はこれを行うには良い方法は分かりませんが、ここではうまくいくはずの解決策があります。

あなたは2つのリソースルートグループを使用することができます。

Route::resource('photos', 'PhotoController', [ 
    'parameters' => [ 
     'photo' => 'photo_no_scope', 
    ], 
    'only' => ['edit', 'update'], 
]); 

Route::resource('photos', 'PhotoController', [ 
    'except' => ['edit', 'update'], 
]); 

その後、あなたはLaravel何photo_no_scope手段を指示する必要があります。これを実行するのに最適な場所は、あなたのRouteServiceProvider内にある:

class RouteServiceProvider extends ServiceProvider { 
    public function boot() { 
     parent::boot(); 

     // Include archived photos 
     Route::bind('photo_no_scope', function ($id) { 
      return Photo::withoutGlobalScopes()->findOrFail($id); 
     }); 
    } 
} 

がテストしていませんが、あなたはまた、最終的には代わりに$photo

0

$photo_no_scope引数を探すために、あなたのコントローラーを更新する必要があるかもしれませんが、私が見つかりました。私がグローバルスコープを削除したいときにリソースルートの代わりに通常のルートを使用するのが最もクリーンな方法でした。

関連する問題