从Laravel资源控制器中的自动加载资源中删除查询范围

时间:2017-10-29 11:25:03

标签: laravel-5 laravel-5.5

在Laravel 5中,如果使用资源控制器,模型会自动加载并进入方法 但是,我有一个查询范围检查我的模型是否处于活动状态。对于这个特定情况,我想删除该查询范围,但将其保留在类中的其他方法上。

我可以看到我可以覆盖模型中的resolveRouteBinding。但是这会覆盖所有方法,而不仅仅是一种方法。

感谢。

2 个答案:

答案 0 :(得分: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);
        });
    }
}

Haven未经过测试,但您可能还需要更新控制器以查找$photo_no_scope参数,而不是$photo

答案 1 :(得分:0)

最后,我发现最简洁的方法是在我想删除全局范围时使用普通路由而不是资源路由。