#laravel #caching #pagination
#laravel #кэширование #разбивка на страницы
Вопрос:
Я использую кэш, но я вижу одни и те же результаты на каждой странице, когда я использую разбивку на страницы. Как я могу это исправить?
Для создания, обновления, редактирования, сохранения я использую Laravel Model Observer.
Мой PostController
public function allpost(Request $request)
{
if($request->cache =='flush')
{
Cache::flush();
}
$data =[];
$posts =Cache::get('posts',[]);
if(empty($posts))
{
$posts = Post::paginate(10);
Cache::forever('posts',$posts);
}
$data['posts'] = $posts ;
return view('frontend.allpost',$data);
}
Мой ModelObserver
<?php
namespace AppObservers;
use IlluminateSupportFacadesCache;
class PostObserver
{
public function created()
{
Cache::forget('posts');
}
public function updated()
{
Cache::forget('posts');
}
public function saved()
{
Cache::forget('posts');
}
public function deleted()
{
Cache::forget('posts');
}
}
Комментарии:
1. Конечно, это так, вы просто разбиваете на страницы первые 10 сообщений. Я думаю, вам нужно кэшировать все сообщения, а затем разбивать результат на страницы.
2. Как разбить страницу на страницы для кэша?
3. Вы
chunk
размещаете сообщения и получаете часть фрагментированного сообщения, соответствующую страницам. Пожалуйста, ознакомьтесь с коллекцией Laravel здесь laravel.com/docs/8.x/collections#introduction
Ответ №1:
это распространенная проблема. Вы просто кэшируете 10 записей и показываете эти 10 записей на всех страницах. Ваша функция кэша должна писать так :
$posts = Cache::remember('get-all-posts-' . request('page', 1), 3600, function () {
return Post::paginate(10);
});
приведенный выше код, записи кэша каждой страницы и ваша проблема исчезнут