Cache Eloquent запрос для ответа - PullRequest
       7

Cache Eloquent запрос для ответа

0 голосов
/ 25 сентября 2018

В одном из моих приложений у меня есть свойство, которое необходимо для всего приложения.

Для нескольких различных частей приложения требуется доступ, например запросы, локальные и глобальные области, но также и команды.

Я хотел бы «кэшировать» это свойство на время запроса.

Мое текущее решение в моем классе 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(), но это решение кажется "хакерским", и оно останется в кэше в течение нескольких запросов.

Я попытался разместить свойство в текущем объекте запроса, но это не будет доступно для команд икажется недоступным в видах лезвий и объектах (без передачи переменной $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);
            });
        });
    }
}

Я не верю, что смогу легко получить доступсвойство запроса в этом методе загрузки.

Другая моя идея - сохранить переменную на Game фасаде, но мне не удалось найти какой-либо документОписание этой практики.

Не могли бы вы помочь мне найти метод "кэширования" свойства Game::current(), доступный в большинстве, если не во всех этих случаях, без использования "хакерского" метода.

1 Ответ

0 голосов
/ 26 сентября 2018

Используйте глобального помощника сеанса следующим образом:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...