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 }