Laravel 记住缓存
Laravel remember cache
我试图在主页上记住 6 分钟的缓存,但这是错误的。
我要一键输入 10 个参数 ( homepage-data )
那我做错了什么?
public function index()
{
$rememberKey = 'homepage-data';
$minutes = 600;
\Cache::remember($rememberKey, $minutes, function () {
$breakingNews = BreakingNews::published();
$rightSlider = Article::rightSlider()->take(20)->get();
$leftSlider = Article::leftSlider()->take(9)->get();
$shows = Show::publishedOrderShows()->take(10)->get();
$blogs = Article::allBlogs()->take(12)->get();
$latestNews = Article::latestNews()->whereNotIn('id', $rightSlider->pluck('id')->merge($leftSlider->pluck('id')))->take(5)->get();
$otherNews = Article::otherNews()->whereNotIn('id', $rightSlider->pluck('id')->merge($leftSlider->pluck('id')))->take(2)->get();
$otherNewsDown = Article::otherNews()->whereNotIn('id', $rightSlider->pluck('id')->merge($leftSlider->pluck('id'))->merge($otherNews->pluck('id')))->take(8)->get();
$analyticNews = Article::allAnalytics()->take(4)->get();
$populars = Article::popular()->take(10)->get();
$quizzes = Quizze::quizOrderBy();
return view('pages/home-page')->with([
'breakingNews' => $breakingNews, 'rightSlider' => $rightSlider,
'leftSlider' => $leftSlider, 'shows' => $shows, 'blogs' => $blogs, 'latestNews' => $latestNews,
'otherNews' => $otherNews, 'otherNewsDown' => $otherNewsDown, 'analyticNews' => $analyticNews,
'populars' => $populars, 'quizzes' => $quizzes
]);
});
}
我收到 'Closure' 的序列化是不允许的错误。
对于您最初的问题,您将所有查询都置于缓存之外,从而违背了缓存的目的。现在,您的闭包内部有太多内容,它正在尝试序列化视图。将视图移出缓存,将检索到的缓存分配给 $data
,然后将其用作数组发送回视图。
public function index()
{
$rememberKey = 'homepage-data';
$minutes = 600;
$data = \Cache::remember($rememberKey, $minutes, function () {
$breakingNews = BreakingNews::published();
$rightSlider = Article::rightSlider()->take(20)->get();
$leftSlider = Article::leftSlider()->take(9)->get();
$shows = Show::publishedOrderShows()->take(10)->get();
$blogs = Article::allBlogs()->take(12)->get();
$latestNews = Article::latestNews()->whereNotIn('id', $rightSlider->pluck('id')->merge($leftSlider->pluck('id')))->take(5)->get();
$otherNews = Article::otherNews()->whereNotIn('id', $rightSlider->pluck('id')->merge($leftSlider->pluck('id')))->take(2)->get();
$otherNewsDown = Article::otherNews()->whereNotIn('id', $rightSlider->pluck('id')->merge($leftSlider->pluck('id'))->merge($otherNews->pluck('id')))->take(8)->get();
$analyticNews = Article::allAnalytics()->take(4)->get();
$populars = Article::popular()->take(10)->get();
$quizzes = Quizze::quizOrderBy();
// CACHE
return ['breakingNews' => $breakingNews,
'rightSlider'=> $rightSlider,
'leftSlider' => $leftSlider,
'shows' => $shows,
'blogs' => $blogs,
'latestNews' => $latestNews,
'otherNews' => $otherNews,
'otherNewsDown' => $otherNewsDown,
'analyticNews' => $analyticNews,
'populars' => $populars,
'quizzes' => $quizzes];
});
return view('pages/home-page')->with([
'breakingNews' => $data['breakingNews'], 'rightSlider' => $data['rightSlider'],
'leftSlider' => $data['leftSlider'], 'shows' => $data['shows'], 'blogs' => $data['blogs'], 'latestNews' => $data['latestNews'],
'otherNews' => $data['otherNews'], 'otherNewsDown' => $data['otherNewsDown'], 'analyticNews' => $data['analyticNews'],
'populars' => $data['populars'], 'quizzes' => $data['quizzes']
]);
}
我试图在主页上记住 6 分钟的缓存,但这是错误的。 我要一键输入 10 个参数 ( homepage-data ) 那我做错了什么?
public function index()
{
$rememberKey = 'homepage-data';
$minutes = 600;
\Cache::remember($rememberKey, $minutes, function () {
$breakingNews = BreakingNews::published();
$rightSlider = Article::rightSlider()->take(20)->get();
$leftSlider = Article::leftSlider()->take(9)->get();
$shows = Show::publishedOrderShows()->take(10)->get();
$blogs = Article::allBlogs()->take(12)->get();
$latestNews = Article::latestNews()->whereNotIn('id', $rightSlider->pluck('id')->merge($leftSlider->pluck('id')))->take(5)->get();
$otherNews = Article::otherNews()->whereNotIn('id', $rightSlider->pluck('id')->merge($leftSlider->pluck('id')))->take(2)->get();
$otherNewsDown = Article::otherNews()->whereNotIn('id', $rightSlider->pluck('id')->merge($leftSlider->pluck('id'))->merge($otherNews->pluck('id')))->take(8)->get();
$analyticNews = Article::allAnalytics()->take(4)->get();
$populars = Article::popular()->take(10)->get();
$quizzes = Quizze::quizOrderBy();
return view('pages/home-page')->with([
'breakingNews' => $breakingNews, 'rightSlider' => $rightSlider,
'leftSlider' => $leftSlider, 'shows' => $shows, 'blogs' => $blogs, 'latestNews' => $latestNews,
'otherNews' => $otherNews, 'otherNewsDown' => $otherNewsDown, 'analyticNews' => $analyticNews,
'populars' => $populars, 'quizzes' => $quizzes
]);
});
}
我收到 'Closure' 的序列化是不允许的错误。
对于您最初的问题,您将所有查询都置于缓存之外,从而违背了缓存的目的。现在,您的闭包内部有太多内容,它正在尝试序列化视图。将视图移出缓存,将检索到的缓存分配给 $data
,然后将其用作数组发送回视图。
public function index()
{
$rememberKey = 'homepage-data';
$minutes = 600;
$data = \Cache::remember($rememberKey, $minutes, function () {
$breakingNews = BreakingNews::published();
$rightSlider = Article::rightSlider()->take(20)->get();
$leftSlider = Article::leftSlider()->take(9)->get();
$shows = Show::publishedOrderShows()->take(10)->get();
$blogs = Article::allBlogs()->take(12)->get();
$latestNews = Article::latestNews()->whereNotIn('id', $rightSlider->pluck('id')->merge($leftSlider->pluck('id')))->take(5)->get();
$otherNews = Article::otherNews()->whereNotIn('id', $rightSlider->pluck('id')->merge($leftSlider->pluck('id')))->take(2)->get();
$otherNewsDown = Article::otherNews()->whereNotIn('id', $rightSlider->pluck('id')->merge($leftSlider->pluck('id'))->merge($otherNews->pluck('id')))->take(8)->get();
$analyticNews = Article::allAnalytics()->take(4)->get();
$populars = Article::popular()->take(10)->get();
$quizzes = Quizze::quizOrderBy();
// CACHE
return ['breakingNews' => $breakingNews,
'rightSlider'=> $rightSlider,
'leftSlider' => $leftSlider,
'shows' => $shows,
'blogs' => $blogs,
'latestNews' => $latestNews,
'otherNews' => $otherNews,
'otherNewsDown' => $otherNewsDown,
'analyticNews' => $analyticNews,
'populars' => $populars,
'quizzes' => $quizzes];
});
return view('pages/home-page')->with([
'breakingNews' => $data['breakingNews'], 'rightSlider' => $data['rightSlider'],
'leftSlider' => $data['leftSlider'], 'shows' => $data['shows'], 'blogs' => $data['blogs'], 'latestNews' => $data['latestNews'],
'otherNews' => $data['otherNews'], 'otherNewsDown' => $data['otherNewsDown'], 'analyticNews' => $data['analyticNews'],
'populars' => $data['populars'], 'quizzes' => $data['quizzes']
]);
}