2014-09-23 3 views
5

Laravel 캐싱 메커니즘이 잘 작동 쿼리 (eager loading).Laravel 캐싱 쿼리

위 예제에서 수행 된 모든 쿼리를 캐시하는 방법이 있습니까? 감사합니다.

답변

2

그런 식으로 eagler loading 개의 쿼리를 캐시 할 수 없습니다.

$users = Cache::remember('custom_cache_key', 10, function() { 
    return User::with('posts', 'addresses')->get(); 
}); 

또는 쿼리 빌더를 사용하여 단일 쿼리를 작성 :

User::with(['posts' => function ($q) { 
    $q->remember(10); 
}, 'addresses' => function ($q) { 
    $q->remember(10); 
}])->remember(10)->get(); 

또는 관계의 정의 :

...->select(...)->join(...)->where(...)->remember(...) 
+0

코드가 질문에 어떻게 대답하는지. – Cfreak

4

당신은 인라인을 할 수 cache::remember 엔진 - 당신이 선택할 수있는이 개 솔루션을 :

public function posts() 
{ 
    return $this->hasMany('Post')->remember(10); 
} 
+0

Jarek, 관련 모델이 업데이트되면 어떻게 될까요? 열심히로드 된 쿼리 전체를 무효화해야합니까 아니면 특정 모델 만 변경해야합니까? 나는 [여기] (https://laracasts.com/discuss/channels/laravel/how-to-properly-do-caching-in-laravel-52)에서 이것을 요구했다. –

+0

@AliGajani LIST를 사용하면 스스로 기억할 필요가 있다는 것을 기억하자. 즉, 업데이트의 경우 적절한 캐시 된 쿼리를 무효화하거나 새로 고치는 커스텀 캐싱 시스템으로 끝납니다. 쿼리 자체 (예 :'remember' 메소드와 같은)에 캐시를 기반으로하는 경우 업데이트 된 관련 테이블에 대한 캐시 만 무효화해야합니다. –