Laravel两个中间件相同的查询

时间:2018-07-17 18:13:00

标签: php laravel routes middleware laravel-5.6

我有两个路由组A和B。我有两个检查类似内容的中间件。 中间件1:(if something in my database has status == 0) { return $next($request);} else { redirect to route X }

中间件2:(if something in my database has status != 0) { return $next($request);} else { redirect to route X }

我的X路线带有SomeController @ action,例如: (if something in my database has status == 0) { redirect to a route in route group A) ELSE { redirect to a route in route group B)

我进行了3次相同的查询(something in my database has status),但是我不知道如何重写代码。我需要在状态== 0时不访问组路由A,在状态!= 0时不访问组路由B。因此不能同时访问它们。

任何方式都可以重写代码,这样我就不会在每次请求时都查询数据库3次吗?

1 个答案:

答案 0 :(得分:0)

如果$ status不会在每个请求的基础上发生变化,则这是使用缓存的理想用例。

$status = Cache::remember('status', $minutes, function () {
    // retrieve $status from database.
    return $status;
});

如果$ status仅对该请求有效,而在整个请求中均未更改,则可以在请求期间将状态存储在应用容器中:

App::singleton('currentStatus', function(){
    // retrieve $status from database.
    return $status;
});

然后在中间件中使用app('currentStatus')