[英]Caching relationships eager loaded in the model (protected $with) with Laravel and Eloquent
在我的Article
模型中,我急切地加載模型中的類別關系:
protected $with = array('category');
當我在控制器中獲取我的文章時,我會緩存我的文章和我急切加載的關系的結果:
$articles = Article::with([
'owner' => function ($q) {$q->remember(10);},
'tags' => function ($q) {$q->remember(10);},
'thumbnail' => function ($q) {$q->remember(10);}
])
->remember(10)->get();
但; article.category
沒有被緩存。 我認為它會與Article
模型一起緩存,因為它在該模型中急切加載。 但這不會發生。
但是,如果我通過將其添加到我的Article::with
來加載(帶緩存)控制器,它確實會被緩存:
'category' => function ($q) {$q->remember(10);}
我知道我可以remember()
關系本身:
public function category()
{
return $this->belongsTo('Category', 'category_id')->remember(10);
}
但是它總是被緩存,我想定義它是否以及在控制器中緩存多長時間。 因為值可能隨使用而變化。
那可能嗎? 或者必須在模型中定義緩存,因為急切加載發生在那里?
只需在控制器中使用with('category' => ...
您可能希望將其提取到存儲庫,因此您不會使用所有邏輯填充控制器。 而且存儲庫現在很流行;)
搜索存儲庫模式以了解更多信息。
在laravel中,世界存儲庫主要指的是對存儲層的抽象(無論是db還是eloquent或其他任何東西),這將使您的控制器與您正在使用的持久性引擎分離。
更重要的是,它可以更輕松地測試您的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.