【发布时间】:2021-11-24 21:55:05
【问题描述】:
我试图在主页上记住 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
]);
});
}
我收到“不允许序列化”的错误。
【问题讨论】:
-
它给出了什么错误?
-
你违背了缓存的目的。它将在每个请求上运行所有这些查询,而不是从缓存中检索它们。相反,查询应该在缓存内。阅读Laravel caching 了解它是如何工作的,特别是Retrieve & Store
-
我编辑了代码,但出现“不允许序列化”闭包错误。 '错误
-
view会返回一个请求,除非您使用->__toString(),否则这将不起作用。当然,您现在不会从函数本身返回任何内容。 -
它正在工作 $rememberKey = 'homepage-data'; $分钟 = 600; $rightSlider = \Cache::remember($rememberKey, $minutes, function () { return Article::rightSlider()->take(20)->get(); });但我需要所有变量,不仅仅是一个好的感谢您的帮助