2015-10-29 4 views
2

Как кэшировать ленивые нетерпеливые запросы загрузки на основе отношений модели. Например -Кэширование Lazy Eager Загрузка запросов в Laravel 5.1

$books = App\Book::all(); 

$books->load('author', 'publisher'); 

можно кэшировать первый запрос с чем-то вроде этого

$books = Cache::remember('allbooks', 60, function() { 
      return App\Book::all(); 
     }); 

Как кэшировать второй запрос?

Если нет прямого способа, предложите любое обходное решение, возможно, с образцом кода.

Обновление: Мне нужно, чтобы второй запрос выполнялся отдельно, поэтому я могу очистить эти два ключа кеша отдельно.

ответ

3

Вы можете использовать Построитель запросов with метода:

$books = App\Book::with(['author','publisher'])->get(); 

Или просто сделать дополнительную нагрузку внутри кэша вызываемая:

$books = Cache::remember('allbooks', 60, function() { 
    return App\Book::all()->load('author', 'publisher'); 
}); 

Update: сохранить кэша отделившихся нужны два переменные, такие как:

$books = Cache::remember('allbooks', 60, function() 
{ 
    return App\Book::all(); 
}); 
$booksAP = Cache::remember('allbooks_ap', 60, function() use ($books) 
{ 
    return $books->load('author', 'publisher'); 
}); 
+0

Thanks но мне нужно загрузить отношения отдельно (я должен был сделать это ясно в вопросе). Мне нужно это отдельно, поэтому я могу сделать недействительным один кэш вместо обоих. Например. Сообщение - LikedbyUsers. На каждом новом LIKE я хочу аннулировать кеш-запрос, содержащий запрос для LikedbyUsers, но сохранить неподдерживаемый кеш сообщений. – Aakash

+0

ОК! см. обновленный ответ –

+1

Спасибо. Это почти правильно, но вместо назначения $ booksAP во второй функции назначьте его в $ books, чтобы отношения продолжали работать. В противном случае мне нужно будет передать $ booksAP моим взглядам. – Aakash

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

  • Нет связанных вопросов^_^