legend3---laravel分页缓存问题

legend3---laravel分页缓存问题

一、总结

一句话总结:

laravel缓存分页数据的时候,就算在model中,paginate分页从数据库中获取数据还是可以获取到分页数据的,我们需要关注的就是找到分页参数,然后按分页参数缓存好数据即可
$request = request()->toArray();
$page=1;
if(isset($request['page'])) $page=$request['page'];
$lessons=LessonChoose::cacheLessonList_byTagId($tag_id,$page);

1、laravel在模型中查看请求的参数?

a、获取请求对象:$request = request();
b、获取请求参数的数组(比如分页):$request = request()->toArray();

二、laravel分页缓存问题

博客对应课程的视频位置:

1、控制器中

核心代码:

1 $request = request()->toArray();
2 $page=1;
3 if(isset($request['page'])) $page=$request['page'];
4 $lessons=LessonChoose::cacheLessonList_byTagId($tag_id,$page);

完整代码:

 1     //课程选择页
 2     public function lessonChoose($tag_id=0){
 3         session(['nowControllerAction'=>AppModelControllerAndFunction::jointControllerAndFunction()]);
 4 
 5         //dd($tag);
 6         //1、获取标签数据
 7         $tags=LessonTag::cacheLessonTag();
 8 
 9         //2、获取课程的总课程数:
10         $lessons_count=LessonChoose::cacheLessonCount();
11 
12 
13         //根据tag来获取课程数据
14         //有page,不能缓存
15         $request = request()->toArray();
16         $page=1;
17         if(isset($request['page'])) $page=$request['page'];
18         $lessons=LessonChoose::cacheLessonList_byTagId($tag_id,$page);
19 
20 
21         //如果用户登录了
22         if(Auth::guard('user')->user()){
23             $u_id=Auth::guard('user')->user()->id;
24             //步骤二:获取用户的课程点赞信息 和 用户收藏的课程的信息
25 
26             $likeAndCollectLesson=LikeAndCollectLesson::cache_likeAndCollectLesson_ids($u_id);
27             $likeLessons_l_ids=$likeAndCollectLesson['likeLessons_l_ids'];
28             $collectLessons_l_ids=$likeAndCollectLesson['collectLessons_l_ids'];
29         }else{
30             $likeLessons_l_ids=[];//用户喜欢的课程id集合
31             $collectLessons_l_ids=[];//用户收藏的课程的id集合
32         }
33 
34 
35         //dd($lessons);
36         return view('home.lesson.choose_lesson',compact(['tags','lessons','tag_id','likeLessons_l_ids','collectLessons_l_ids','lessons_count']));
37     }
 

2、对应的缓存

 1     //2、缓存课程列表(根据tag_id)
 2     //全部课程的话,tagId为0
 3     //page参数是解决分页问题
 4     public static function cacheLessonList_byTagId($tag_id,$page=1){
 5         $cacheStr='Lesson_lessonList_byTagId_'.$tag_id.'_'.$page;
 6         $lessons = Cache::get($cacheStr);
 7         if($lessons){
 8             return $lessons;
 9         }else{
10             if($tag_id){
11                 $lessons=Tag::find($tag_id)->lessons()->orderBy('l_like', 'desc')
12                     ->orderBy('l_collect_num', 'desc')->orderBy('l_click', 'desc')
13                     ->orderBy('l_comment_num', 'desc')->latest()->paginate(12);
14 //            $lessons=Tag::find($tag_id)->lessons()->latest()->paginate(12);
15             }else{
16                 $lessons=Lesson::orderBy('l_like', 'desc')
17                     ->orderBy('l_collect_num', 'desc')->orderBy('l_click', 'desc')
18                     ->orderBy('l_comment_num', 'desc')->latest()->paginate(12);
19 //            $lessons=Lesson::latest()->paginate(12);
20             }
21 
22 
23             Cache::put($cacheStr, $lessons, 1);
24             return $lessons;
25         }
26     }
 
原文地址:https://www.cnblogs.com/Renyi-Fan/p/12635028.html