2015-06-15 7 views
0

Использование Laravel's Eloquent Model, как я могу обновлять данные объекта при доступе к нему, если это было> 30 дней с момента последнего обновления?Laravel Eloquent Update Каждые 30 дней

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

Есть ли функция, которая Laravel вызывает каждый раз, когда модель загружается, где я могу проверить, прошло ли 30 дней, вызвать API для загрузки новых данных, а затем сохранить его?

+0

хрон работу каждые 30 дней? –

ответ

0

Непонятно, как вы используете данные из API, но вы можете найти возможности кэширования Laravel весьма удобными. В частности, метод remember().

use Illuminate\Support\Facades\Cache; 

// Put the result returned from the closure in the cache for 30 days 
// under the key 'apidata' and serve this data off of cache if it already there 
$apidata = Cache::remember('apidata', 60*24*30, function() { 
     // talk to your API 
     // and return the data from this closure 
     return $result; 
}); 

Вы можете сделать шаг дальше и завернуть его в классе обслуживания, чтобы сделать вашу жизнь проще. Что-то вдоль линий

namespace App; 

use GuzzleHttp\Client; 
use Illuminate\Support\Facades\Cache; 

class ApiData 
{ 
    protected $client; 

    public function __construct(Client $client) 
    { 
     $this->client = $client; 
    } 

    public function all() 
    { 
     return Cache::remember('apidata', 60*24*30, function() { 
      $response = $this->client->get('http://httpbin.org/get'); 
      return $response->getBody()->getContents(); 
     }); 
    } 
} 

Затем используйте его

// Get an instance off of IoC container 
$api = app('App\ApiData'); 
$apidata = $api->all(); 
+0

Помогло ли это в любом случае? – peterm

Смежные вопросы