簡體   English   中英

使用Laravel和Eloquent在模型中加載緩存關系(使用$ with)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM