#php #laravel
#php #laravel
Вопрос:
$posts = Post::all()->filter(function($item) use (amp;$pYear){
return Persian::jDate(...) == $pYear;
})->sortByDesc('id')->paginate(5);
Когда я разбиваю цепочку на страницы (5), я получаю эту ошибку «Метод разбивки на страницы не существует». Как я могу разбить свой результат на страницы, пожалуйста, помогите, спасибо.
Комментарии:
1. вы интегрировали разбиение на страницы в своем представлении?
2. @DiegoCespedes, {!! $posts->links() !!} ?
Ответ №1:
Наконец, я решил это, создав пользовательский разделитель страниц моей коллекции, возможно, это не лучший способ, я не смог найти более короткое решение, в любом случае, мой код теперь работает нормально.
use IlluminatePaginationLengthAwarePaginator;
protected $perPage = 5;
$posts = Post::get()->filter(function($item) use (amp;$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' => '']);
Ответ №2:
Попробуйте удалить all()
$posts = Post::filter(function($item) use (amp;$pYear){
return Persian::jDate('Y', strtotime($item->created_at),'','Asia/Tehran','en') == $pYear;
})->sortByDesc('id')->paginate(5);
Комментарии:
1. Вызов неопределенного метода IlluminateDatabaseQueryBuilder::filter()
2. Возможно, вам лучше заставить его работать с
->where
закрытием, а неfilter
3. Мне нужен код, похожий на этот, но это не работает!
$posts = Post::where(Persian::jDate('Y', strtotime('created_at'),'','Asia/Tehran','en'), $pYear);