Laravel 5.3 cadeia paginada após filtro

$posts = Post::all()->filter(function($item) use (&$pYear){ return Persian::jDate(...) == $pYear; })->sortByDesc('id')->paginate(5); 

Quando eu chain paginate (5), recebo este erro “O paginação do método não existe”. Como posso paginar meu resultado, ajude, obrigado.

Tente remover all()

 $posts = Post::filter(function($item) use (&$pYear){ return Persian::jDate('Y', strtotime($item->created_at),'','Asia/Tehran','en') == $pYear; })->sortByDesc('id')->paginate(5); 

Finalmente, resolvi isso criando um paginador personalizado da minha coleção, talvez essa não seja a melhor maneira, não consegui encontrar uma solução mais curta, de qualquer forma meu código funciona bem agora.

 use Illuminate\Pagination\LengthAwarePaginator; protected $perPage = 5; $posts = Post::get()->filter(function($item) use (&$pYear){ return Persian::jDate(...) == $pYear; })->sortByDesc('id'); //this code simulates: ->paginate(5) $posts = new LengthAwarePaginator( $posts->slice((LengthAwarePaginator::resolveCurrentPage() * $this->perPage)-$this->perPage, $this->perPage)->all(), count($posts), $this->perPage, null, ['path' => '']);