缓存雄辩的查询响应

时间:2018-09-25 18:30:03

标签: laravel caching eloquent

在我的一个应用程序中,我拥有整个应用程序所需的属性。

应用程序的多个不同部分需要访问,例如请求,本地和全局作用域以及命令。

我想在请求期间“缓存”该属性。

我在Game类中当前的解决方案如下:

/**
 * Get current game set in the .env file.
 * @return Game
 */
public static function current()
{

    return Cache::remember('current_game', 1, function () {
        static $game = null;
        $id = config('app.current_game_id');
        if ($game === null || $game->id !== $id) {
            $game = Game::find($id);
        }
        return $game;
    });
}

我可以使用Game::current()来成功调用此方法,但是此解决方案感觉很“ hacky”,并且会在多个请求过程中保持缓存状态。

我尝试在当前请求对象上放置一个属性,但是该属性对命令不可用,并且在刀片视图和对象中似乎无法访问(未传递$request变量。

其用法的另一个示例如下所述:

class Job extends Model
{
    /**
     * The "booting" method of the model.
     *
     * @return void
     */
    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope('game_scope', function (Builder $builder) {
            $builder->whereHas('post', function ($query) {
                $query->where('game_id', Game::current()->id);
            });
        });
    }
}

我认为我无法通过这种引导方法轻松访问request属性。

我的另一个想法是将变量存储在Game Facade上,但是我找不到有关此做法的任何文档。

您能帮我找到一种在大多数情况下(如果不是全部情况下)“访问” Game::current()属性的方法,而无需使用“ hacky”方法的方法。

1 个答案:

答案 0 :(得分:0)

像这样使用全局会话帮助器:

// Retrieve a piece of data from the session... 
$value = session('key'); 
// Store a piece of data in the session...
session(['key' => 'value']);

有关配置信息和更多选项:https://laravel.com/docs/5.7/session