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']
    ]);
}