Получить реляционный объект из кеша

Ниже приведен код, который извлекает пользователей и объект реляционной роли для каждого пользователя.

$query = (new UserModel())->newQuery();
$query->with("Role");
$data = $query->get(["UserName", "EmailAddress", "User_ID"]);

У меня есть 3 роли в базе данных, и они находятся в кеше. Есть ли способ изменить эту строку кода: $query->with("Role"); таким образом, чтобы при каждом извлечении пользователей ему не нужно было извлекать роли из базы данных.


person Pankaj    schedule 13.11.2018    source источник


Ответы (1)


Может быть, вы можете подключиться к событию Retrieved из Eloquent. При извлечении модели из базы данных вы можете получить роль из кеша и установить ее для модели. Возможно, это может быть решением для вас?

Взгляните на документацию Laravel по красноречивым событиям здесь: https://laravel.com/docs/5.6/eloquent#events

Возможно, это сработает для вас, добавьте это в свой класс модели:

/**
 * Boot the model.
 */
protected static function boot()
{
    parent::boot();
    static::retrieving(function ($user) {
        $user->fetchFromCache("Role"); //replace this line with however you could fetch it from the cache
    });
}
person Fjarlaegur    schedule 13.11.2018
comment
Я сделал, не так сложно. Но вы должны написать логику, чтобы получить его из кеша самостоятельно. Помните, что у вас всегда должна быть резервная копия. Например, если он не существует в кеше, вы должны получить его из БД и кешировать. - person Fjarlaegur; 16.11.2018