Разрушение кеша по отношению к Laravel 5.6 - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть модель с именем Tournament, где каждый Tournament кэшируется с некоторыми из его отношений, используя ключ для каждой модели (т.е. tournament.1).

return \Cache::remember('tournament.' . $id, 60*24*7, function() use ($id) {
    return Tournament::where('id', $id)
        ->with(['prizes', 'sponsor'])
        ->firstOrFail();
});

Когда я обновляю отношения, я бы хотел забыть ключ этого турнира. Я знаю, что мог бы использовать событие как это:

public static function boot()
{
    static::saving(function ($prize) {
        \Cache::forget('tournament.' . $prize->tournament->id);
    });

    return parent::boot();
}

Однако, делая это, я должен повторить этот код и для всех других отношений. Я мог бы создать для этого черту, но есть ли лучший способ сделать то, чего я хочу достичь?

1 Ответ

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

Я решил эту проблему, используя черту.

namespace App\Traits;

trait ShouldCacheBust
{
/**
 * The "booting" method of the model.
 */
public static function boot()
{
    static::saving(function ($model) {
        $cacheKey = static::cacheBustKey($model);

        if ($cacheKey) {
            \Cache::forget($cacheKey);
        }
    });

    return parent::boot();
}

/**
 * Return the key to be removed from Cache
 * 
 * @param Model $model
 * @return string|null
 */
abstract public function cacheBustKey(Model $model);
}

Затем используйте это так:

/**
 * Return the key to be removed from Cache
 *
 * @param Model $model
 * @return mixed|string
 */
public static function cacheBustKey(Model $model)
{
    return 'tournament.' . $model->id;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...