ในโมเดล 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' => ...
ในคอนโทรลเลอร์ของคุณ - person Jarek Tkaczyk   schedule 08.10.2014