2015-10-29 27 views
2

如何根據模型關係緩存惰性加載查詢。例如 -緩存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'); 
}); 

更新:要保持彼此分離,你需要兩個緩存變量,如下所示:

$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

謝謝但我需要單獨加載關係(我應該在問題中明確指出)。我單獨需要它,所以我可以使一個緩存而不是兩個緩存無效。例如。 Post是LikedbyUsers。在每個新的LIKE上,我想使包含LikedbyUsers查詢的緩存無效,但保持Post查詢緩存完好無損。 – Aakash

+0

好!查看更新回答 –

+1

謝謝。這幾乎是正確的,但不是第二個函數中的$ booksAP賦值,而是將它分配給$ books,以使關係繼續工作。否則,我需要將$ booksAP傳遞給我的觀點。 – Aakash