Задать вопрос
@sp-megamen

Как в laravel закешировать модель вместе с атрибутами?

Привет!
У меня есть модель user с аккессором email, которому просто необходимо тянуть данные с удаленного сервера.
Примерно так:
public function getEmailAttribute(){
    $curl = new Curl;
    $responseJson = $curl->post('https://mydb.remote/api/user.json',array(
        'user_id'=>$this->id
    ));
    $response = json_decode($responseJson);
    return $response->email;
}

Но когда я пытаюсь работать с кешем, то функция getEmailAttribute вызывается каждый раз, хоть сам пользователь и кешируется
$value = Cache::remember('users', $minutes, function () {
    return User::find($id);
});


Подскажите, пожалуйста, как закешировать модель вместе с атрибутами? Спасибо!
  • Вопрос задан
  • 131 просмотр
Подписаться 1 Простой 6 комментариев
Пригласить эксперта
Ответы на вопрос 1
@Yan-s
просто необходимо тянуть данные с удаленного сервера

Звучит не очень...

Аккессор и должен выполняться каждый раз при обращении. Значит вам надо создать атрибут для хранения емейла, который будет заполнятся до кеширования. Или отдельно кешировать результат выполнения getEmailAttribute() внутри самой этой функции.

А если уж на то пошло, взаимодействие с другим сервисом нужно вынести в отдельное место, там же кешировать емейл, тогда getEmailAttribute() будет получать кешированный адрес.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы