Задать вопрос
@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);
});


Подскажите, пожалуйста, как закешировать модель вместе с атрибутами? Спасибо!
  • Вопрос задан
  • 139 просмотров
Подписаться 1 Простой 6 комментариев
Помогут разобраться в теме Все курсы
  • Loftschool
    Комплексное обучение PHP
    6 недель
    Далее
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Skillbox
    Профессия PHP-разработчик с нуля до PRO
    7 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@Yan-s
просто необходимо тянуть данные с удаленного сервера

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

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

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

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

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